如何修复我的非工作Python正则表达式匹配?

时间:2014-04-27 15:25:51

标签: 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,64bit。

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

注意:您的模式不起作用,因为[\d.]*将匹配第一个位置的空字符串。这就是我用+替换量词并将方法从匹配更改为搜索的原因。

没有必要转义字符类中的点,因为默认情况下它被视为文字字符。

答案 1 :(得分:2)

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

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

  • 使用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']

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