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.
仅供参考,不像 .NET
、Java
、PCRE
、Delphi
、PHP
在 Python
\Z
中仅匹配在字符串的最后。 Python不支持\z
.
我想将完整的字符串与特定模式匹配。比方说:
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.
仅供参考,不像 .NET
、Java
、PCRE
、Delphi
、PHP
在 Python
\Z
中仅匹配在字符串的最后。 Python不支持\z
.