Python正则表达式 - 拒绝带换行符的字符串

3

我希望将完整的字符串与特定模式进行匹配。比如说:

word = "aaaa"
test = re.match(r"^aaaa$", word) # this returns True

然而,如果该单词后面跟着一个换行符:
word = "aaaa\n"
test = re.match(r"^aaaa$", word) # Also returns True :(

但我希望找到一种方法,在这种情况下返回False。有没有办法区分“\n”?


1
可能有更简单的方法,但是 ^aaaa(?=(?!\n)$) 可以工作。 - rock321987
2个回答

5

使用 \A 代替起始锚点 ^,使用 \Z 代替结束锚点 $

>>> print re.match(r'\Aaaaa\Z', 'aaaa')
<_sre.SRE_Match object at 0x1014b9bf8>

>>> print re.match(r'\Aaaaa\Z', 'aaaa\n')
None

\A匹配字符串的实际开头,\Z匹配实际结尾,在多行字符串中只能有一个\A\Z,而$可以在每一行中匹配。

我建议阅读这篇非常好的关于永久行锚的文章。

只是提醒一下,与.NETJavaPCREDelphiPHP不同,在Python中,\Z仅匹配字符串的最后。 Python不支持\z


1
太棒了。不知道我怎么错过了!非常感谢。 - Eduardo Almeida

1
您可以使用“负向先行断言”来检查是否包含换行符。在您的情况下,是这样的:^aaaa(?!\n)$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接