首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式检查整个字符串

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

Stack Overflow用户
提问于 2010-10-22 14:41:16
回答 5查看 34.2K关注 0票数 23

我尝试检查字符串是否是数字,所以正则表达式"\d+“看起来不错。然而,由于某些原因,正则表达式也符合"78.46.92.168:8000“,这是我不想要的,只需要一点代码:

代码语言:javascript
复制
class Foo():
    _rex = re.compile("\d+")
    def bar(self, string):
         m = _rex.match(string)
         if m != None:
             doStuff()

并且当输入ip地址时调用doStuff()。我有点困惑,“怎么做到的?”或者":“匹配"\d"?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-22 14:44:36

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

使用^\d+$

或者,甚至更好:"78.46.92.168:8000".isdigit()

票数 32
EN

Stack Overflow用户

发布于 2010-10-22 14:45:17

re.search()不同,re.match()总是从字符串的开头开始匹配,但允许匹配在字符串结束之前结束。

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

更明确地说,您还可以使用_rex.match(r"^\d+$") (这是多余的),或者干脆去掉re.match()而只使用_rex.search(r"^\d+$")

票数 13
EN

Stack Overflow用户

发布于 2017-07-08 06:28:04

Python中有几个选项可以将整个输入与正则表达式进行匹配。

Python 2和3

在Python 2和3中,您可以使用

代码语言:javascript
复制
re.match(r'\d+$') # re.match anchors the match at the start of the string, so $ is what remains to add

或者-为避免在字符串中的最后一个\n之前进行匹配:

代码语言:javascript
复制
re.match(r'\d+\Z') # \Z will only match at the very end of the string

或者与上面的re.search方法相同,该方法需要使用^ / \A字符串开头锚点,因为它不在字符串的开头锚定匹配:

代码语言:javascript
复制
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之后,只需使用适当的方法:

代码语言:javascript
复制
_rex = re.compile("\d+")
if _rex.fullmatch(s):
    doStuff()
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3994493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档