python - 为什么相同正则表达式的 python re.findall() 对于两个等效的输入字符串产生不同的结果?

标签 python regex

为什么是re.findall()仅显示第一个表达式 ( ex1 ) 的单个 匹配项,但第二个表达式 ( ex2 ) 的两个匹配项。我预计这两种情况都会有两个匹配,因为它们对于这种情况似乎是等效的。

这是代码:

#!/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)

这是输出。 python2和python3是一样的:

['{{ var2 }}']
['{{ var1 }}', '{{ var2 }}']

最佳答案

我错误地使用了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 }}']

关于python - 为什么相同正则表达式的 python re.findall() 对于两个等效的输入字符串产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309940/

相关文章:

python - 收到 DistributionNotFound 错误,但包存在

java - 在大字符串中删除字符串模板直到 '\n' - Java

regex - 匹配正则表达式中的第一个字符?

java - 这个正则表达式不匹配是怎么回事?

php - 使用正则表达式从网站的 HTML 源代码中提取内容

Python编码风格

python - _generate_jwt_token 处的格式字符串无效

python - 为表中的键创建计数的快速方法

python - 每个维度具有不同内核的 3D 高斯过程

Java 8 将 for 循环和值的总和转换为流/lambda?