首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >re.match vs re.search

re.match vs re.search
EN

Stack Overflow用户
提问于 2012-02-07 13:19:22
回答 2查看 3.4K关注 0票数 0

如果我这样做

代码语言:javascript
复制
    import re
    m = re.compile("[0-9]{1,}Y")
    res = m.search("AUD3M25Y_EOD2")
    if res:
            return res.group(0)[:-1]

我会得到25分作为答案

但是,如果我这样做了

代码语言:javascript
复制
    import re
    m = re.compile(".*([0-9]{1,})Y.*")
    res = m.match("AUD3M25Y_EOD2")
    if res:
            return res.groups(0)

我只会得到5个。

为什么会有不同?

这和'global‘选项有什么关系吗?(很像vi中的s/g)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 13:23:37

在您的匹配中,第一个.*是greedy,它尽可能多地匹配,包括数字。如果你让它不那么贪婪,它就会起作用:

代码语言:javascript
复制
 .*?([0-9]{1,})Y.*

(另外,我认为这个贪婪的问题不能作为re.search和re.match的公平比较)

票数 6
EN

Stack Overflow用户

发布于 2012-02-07 13:23:12

请先阅读文档。正如你所期望的,它有答案。

re.search

遍历字符串,查找正则表达式模式产生匹配的位置,并返回相应的匹配对象。如果字符串中没有与模式匹配的位置,则返回None;请注意,这不同于在字符串中的某个位置查找长度为零的匹配。

re.match

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回None;请注意,这不同于零长度匹配。

注意:如果要在字符串中的任何位置找到匹配项,请改用search()

此外,在同一页面上,Matching vs. Searching

Python基于正则表达式提供了两种不同的原语操作: match 只在字符串的开头检查匹配,而search只在字符串的任何位置检查匹配(这是默认执行的操作)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9171359

复制
相关文章

相似问题

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