所以我有一个正则表达式告诉数字是否为整数。
regex = '^(0|[1-9][0-9]*)$'
import re
bool(re.search(regex, '42\n'))
返回True,它不应该? 问题出在哪里?
答案 0 :(得分:2)
'$'
匹配字符串的结尾或在字符串末尾的换行符之前
请尝试\Z
。
此外,每当您发现自己编写以^
或\A
开头并以$
或\Z
结尾的正则表达式时,如果您的意图仅匹配在整个字符串中,您应该使用re.match
而不是re.search
(并省略正则表达式中的边界标记)。
答案 1 :(得分:1)
是的,在结束前匹配一个\ n的$是一种陷阱/不一致。查看我的python正则表达式陷阱列表:http://www.cofoh.com/advanced-regex-tutorial-python/traps
答案 2 :(得分:0)
正则表达式应为regex = '\b^(0|[1-9][0-9]*)$\b'
答案 3 :(得分: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)