Python正则表达式无法按预期工作

时间:2014-08-25 03:20:35

标签: python regex python-2.7

这是我想在python2.7上尝试的原始正则表达式

link

在我的python2.7命令行中,我的代码

>>> import re
>>> r = r'(\.+)'
>>> str = 'hello... how are you? Im fine...'
>>> type(re.match(r, str, re.I))    # a mismatch
<type 'NoneType'>

我应该在python上进行哪些修改?

3 个答案:

答案 0 :(得分:8)

re.match尝试在字符串的开头匹配。由于它在开始时不匹配,re.match会返回None。使用re.search(返回第一个匹配,字符串中的任何位置)或re.finditer(返回产生所有匹配的迭代器):

>>> import re
>>> r = r'(\.+)'
>>> data = 'hello... how are you? Im fine...'

re.match

>>> re.match(r, data, re.I) # None

re.search

>>> m = re.search(r, data, re.I) # a single match
>>> m
<_sre.SRE_Match object at 0x12345678>
>>> m.group(1)
'...'

re.finditer

>>> for m in re.finditer(r, data, re.I): # all matches
...     print(m.group(1))

输出

...
...

其他说明

  • 不要为变量str命名,因为它会影响内置变量。我已将其重命名为data
  • 你在这里不需要re.I(我在示例中保留了它),因为(\.+)与关注案例的任何字符都不匹配(.不是一封正确的信件)

答案 1 :(得分:1)

re.match仅匹配字符串的开头。我知道,这令人困惑。改变你需要重新研究的东西,它应该有效:

r = re.search(r'(\.+)', str)

答案 2 :(得分:0)

匹配函数尝试从行的开头搜索字符串。由于.尚未开始,您需要在模式中添加.*?

>>> import re
>>> r = r'.*?(\.+)'
>>> str = 'hello... how are you? Im fine...'
>>> type(re.match(r, str, re.I))
<type '_sre.SRE_Match'>

如果点位于开头,你的正则表达式会找到匹配。

>>> str = '... how are you? Im fine...'
>>> r = r'(\.+)'
>>> type(re.match(r, str, re.I))
<type '_sre.SRE_Match'>

使用re.findall功能打印字符串中的所有连续点。

>>> str = '... how are you? Im fine...'
>>> r = r'(\.+)'
>>> m = re.findall(r, str, re.I)
>>> for i in m:
...     print i
... 
...
...