将正则表达式与多行字符串匹配

时间:2014-11-13 16:06:10

标签: python regex string python-3.x

我正在尝试将Regex与多行字符串匹配,但匹配在第一行之后失败。

这些表达式按预期工作:

>>> import re
>>> r = re.compile("a")
>>> a = "a"
>>> r.match(a)
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> a = "a\n"
>>> r.match(a)
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>>

虽然这个表达不起作用:

>>> a = "\na"
>>> r.match(a)
>>>

2 个答案:

答案 0 :(得分:3)

re.match旨在匹配字符串的第一个字符(开头)。在前两个示例中,匹配正常,因为a是第一个字符。但是,在最后一个示例中,匹配失败,因为\n是第一个字符。

在这种情况下,您需要使用re.search让Python搜索a

>>> import re
>>> r = re.compile("a")
>>> a = "\na"
>>> r.search(a)
<_sre.SRE_Match object; span=(1, 2), match='a'>
>>>

另外,只需注意:如果您使用多行字符串,则需要设置dot-all标志以使.匹配换行符。这可以使用re.DOTALL完成。

答案 1 :(得分:2)

为什么match不起作用?

match在字符串的开头搜索模式。

如何纠正?

使用search代替

>>> import re
>>> pat=re.compile('a')
>>> pat.search('\na')
<_sre.SRE_Match object at 0x7faef636d440>
>>>