如何在Python中忽略正则表达式中的\n?

1 投票
4 回答
5504 浏览
提问于 2025-04-18 03:11

我有一个正则表达式,用来判断一个数字是否是整数。

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(),并且去掉开头的边界符号。

撰写回答