为什么re.findall()
仅显示第一个表达式(ex1
的单个匹配项,而第二个表达式({{ 1}})。我预计这两种情况都将有两次匹配,因为在这种情况下它们看起来是相同的。
代码如下:
ex2
这是输出。 python2和python3相同:
#!/usr/bin/env python
import re
# first expression (no leading new line)
ex1 = '''\
ipv4: {{ var1 }}
timestamp: {{ var2 }}
'''
# second expression, prepended '#\n'
ex2 = '#\n' + ex1
re1 = re.compile(r'{{\s*.+\s*}}')
# Why are they different?
print(re1.findall(ex1, re.M)) # 1 match
print(re1.findall(ex2, re.M)) # 2 matches
#assert re1.findall(ex1, re.M) == re1.findall(ex2, re.M)
答案 0 :(得分:0)
我没有正确使用re.M
,这是正确的代码。非常感谢[@Wictor] [1]指出这一点。另外,其他一些人指出根本不需要re.M
。谢谢大家。
#!/usr/bin/env python
import re
ex1 = '''\
ipv4: {{ var1 }}
timestamp: {{ var2 }}
'''
ex2 = '#\n' + ex1
re1 = re.compile(r'{{\s*.+\s*}}')
print(re1.findall(ex1)) # 2 matches
print(re1.findall(ex2)) # 2 matches
assert re1.findall(ex1, re.M) == re1.findall(ex2, re.M)
输出:
['{{ var1 }}', '{{ var2 }}']
['{{ var1 }}', '{{ var2 }}']