我尝试检查字符串是否是数字,所以正则表达式"\d+“看起来不错。然而,由于某些原因,正则表达式也符合"78.46.92.168:8000“,这是我不想要的,只需要一点代码:
class Foo():
_rex = re.compile("\d+")
def bar(self, string):
m = _rex.match(string)
if m != None:
doStuff()并且当输入ip地址时调用doStuff()。我有点困惑,“怎么做到的?”或者":“匹配"\d"?
发布于 2010-10-22 14:44:36
\d+匹配字符串中任何正数的数字,因此它匹配第一个78并成功。
使用^\d+$。
或者,甚至更好:"78.46.92.168:8000".isdigit()
发布于 2010-10-22 14:45:17
与re.search()不同,re.match()总是从字符串的开头开始匹配,但允许匹配在字符串结束之前结束。
因此,您需要一个锚点:_rex.match(r"\d+$")可以工作。
更明确地说,您还可以使用_rex.match(r"^\d+$") (这是多余的),或者干脆去掉re.match()而只使用_rex.search(r"^\d+$")。
发布于 2017-07-08 06:28:04
Python中有几个选项可以将整个输入与正则表达式进行匹配。
Python 2和3
在Python 2和3中,您可以使用
re.match(r'\d+$') # re.match anchors the match at the start of the string, so $ is what remains to add或者-为避免在字符串中的最后一个\n之前进行匹配:
re.match(r'\d+\Z') # \Z will only match at the very end of the string或者与上面的re.search方法相同,该方法需要使用^ / \A字符串开头锚点,因为它不在字符串的开头锚定匹配:
re.search(r'^\d+$')
re.search(r'\A\d+\Z')注意,\A是一个明确的字符串起始锚,它的行为不能用任何修饰符重新定义(re.M / re.MULTILINE只能重新定义^和$行为)。
Python 3
上面部分中描述的所有这些情况以及一个更有用的方法re.fullmatch (也存在于PyPi regex module中):
如果整个字符串与正则表达式模式匹配,则返回相应的match对象。如果字符串与模式不匹配,则返回
None;请注意,这不同于零长度匹配。
因此,在编译regex之后,只需使用适当的方法:
_rex = re.compile("\d+")
if _rex.fullmatch(s):
doStuff()https://stackoverflow.com/questions/3994493
复制相似问题