用正则表达式检查整个字符串

2024-04-26 21:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试检查字符串是否是数字,因此regex“\d+”看起来不错。不过,regex也适合“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”?


Tags: 字符串代码selfrestringfoodefmatch
3条回答

\Z匹配字符串的结尾,而$匹配字符串的结尾或字符串结尾的换行符之前,并且在re.MULTILINE中显示不同的行为。有关详细信息,请参见the syntax documentation

>>> s="1234\n"
>>> re.search("^\d+\Z",s)
>>> s="1234"
>>> re.search("^\d+\Z",s)
<_sre.SRE_Match object at 0xb762ed40>

^{}始终从字符串的开头匹配(与^{}不同),但允许匹配在字符串结尾之前结束。

因此,您需要一个锚:_rex.match(r"\d+$")可以工作。

更明确地说,您还可以使用_rex.match(r"^\d+$")(这是多余的)或者完全删除re.match(),只使用_rex.search(r"^\d+$")

\d+匹配字符串中的任何正数,因此它匹配第一个78并成功。

使用^\d+$

或者,更好的是:"78.46.92.168:8000".isdigit()

相关问题 更多 >