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

Python Regex - Reject strings with newline

我想将完整的字符串与特定模式匹配。比方说:

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

但是,如果单词后跟一个换行符:

word = "aaaa\n"
test = re.match(r"^aaaa$", word) # Also returns True :(

但我想找到一种方法让它在最后一种情况下 return False。有没有办法区分“\n”?

您可以使用 negative lookaheads 检查它是否包含换行符或 not.In 您的情况,^aaaa(?!\n)$

而不是锚 ^$ 使用 \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 之一,而 $可能在每一行都匹配。

我建议reading this very good article on permanent line anchors.

仅供参考,不像 .NETJavaPCREDelphiPHPPython \Z 中仅匹配在字符串的最后。 Python不支持\z.