为什么python匹配错误的模式?

时间:2015-01-08 06:38:16

标签: python regex

import re
look = r'Template.11_31.Single-Volume'
pattern = r'11.31'

match = re.search(pattern,look)

print re.findall(pattern,look)

if (match is not None):
    print match.group(0)

答案:

['11_31']
11_31

我希望它与11.311131匹配,但在这里它也匹配11_31

2 个答案:

答案 0 :(得分:5)

问题在于你的正则表达式11.31匹配任何字符

您可以使用此正则表达式:

pattern = r'11\.?31'

这将匹配11.311131但不匹配11_3111:31,因为\.与文字点匹配,\.?使点可选匹配。

示例:

>>> print re.findall(pattern, "Template.11.31.Single-Volume-1131-something")
['11.31', '1131']

答案 1 :(得分:3)

pattern =r'11.31'

此处.可以匹配任何内容,因此它也会匹配_中的11_31。要么将其转义(\.)或将其放入字符类([.])并在需要时添加更多内容。

使用此

pattern =r'11[.]?31'

参见演示。

https://regex101.com/r/sH8aR8/21