如何在Python中忽略正则表达式中的\n?
我有一个正则表达式,用来判断一个数字是否是整数。
regex = '^(0|[1-9][0-9]*)$'
import re
bool(re.search(regex, '42\n'))
这个正则表达式返回了True,但其实不应该这样?
问题出在哪里呢?
4 个回答
0
是的,那个在结尾前面的 $ 符号匹配有点像个陷阱/不一致的地方。你可以看看我为 Python 列出的正则表达式陷阱: http://www.cofoh.com/advanced-regex-tutorial-python/traps
0
这个正则表达式应该写成 regex = '\b^(0|[1-9][0-9]*)$\b'
0
这个问题中的正则表达式是用来匹配行的开头、数字和行的结尾的。给定的字符串符合这个规则,所以它返回了真(true)。如果你想要在字符串中有数字时返回假(false),可以使用“!”来表示不匹配。
可以参考这个链接了解更多内容:https://docs.python.org/2/library/re.html
regex = '!(0|[1-9][0-9]*)$'
bool(re.search(regex, '42\n')) => (Returns false)
3
来自文档:
'$'
这个符号表示字符串的结尾,或者说在字符串最后的换行符之前的位置。
你可以试试用\Z
。
另外,每当你写的正则表达式是以^
或\A
开头,并且以$
或\Z
结尾时,如果你的目的是要完全匹配整个字符串,建议你使用re.fullmatch()
,而不是re.search()
(并且可以把边界符号从正则表达式中去掉)。如果你用的Python版本太旧,没有re.fullmatch()
这个功能(其实你应该升级一下),那么可以用re.match()
,并且去掉开头的边界符号。