python - 如何修复无法正常工作的 Python 正则表达式匹配?

标签 python regex

我想从这个字符串中获取整数 <some>some 344.3404.3 numbers<tag> .

使用 Pythex 模拟器网站这适用于 [\d\.]* (数字或点重复零次或多次)。 在 Python 中,我取回了整个字符串:

输入:

import re
re.match(r'[\d\.]*', '<some>some 344.3404.3 numbers<tag>').string

输出:

'<some>some 344.3404.3 numbers<tag>'

我错过了什么?

运行 python 3.3.5,win7,64 位。

最佳答案

正则表达式匹配对象的 string 属性包含匹配的 input 字符串,而不是匹配的内容。

如果你想要(第一个)匹配部分,你需要改变三件事:

  • 使用 re.search() 因为 re.match() 只会在字符串的开头找到匹配项,
  • 访问匹配对象的group()方法,
  • 使用 + 而不是 * 否则您将得到一个空(零长度)匹配,除非该匹配恰好位于字符串的开头。<

因此,使用

>>> re.search(r'[\d.]+', '<some>some 344.3404.3 numbers<tag>').group()
'344.3404.3'

>>> re.findall(r'[\d.]+', '<some>some 344.3404.3 numbers more 234.432<tag>')
['344.3404.3', '234.432']

如果您期望不止一场比赛。

关于python - 如何修复无法正常工作的 Python 正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325185/

相关文章:

python - Python 中的 CSV,引号中有换行符

regex - 使用 Ragel 在 Golang 中求两个正则表达式的交集

php - 正则表达式 - 需要小改动

python - QTableWidget - 改变行颜色

python - 如何在 ReportLab 中的同一段落中使用多种文本颜色?

python - Boto 在 ssl.c 中不断崩溃

javascript - 在 MS Word 中使用 RegEx 匹配单词的变体和拼写错误

如果找到多个匹配项,正则表达式将失败

regex - 使用 Python 3 在输入中搜索模式时出错

python - Django:在查询集中相乘