这是我想在python2.7上尝试的原始正则表达式
在我的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上进行哪些修改?
答案 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
...
...
...