re.match vs re.search

Ant*_*ong 0 python regex python-2.6

如果我这样做

    import re
    m = re.compile("[0-9]{1,}Y")
    res = m.search("AUD3M25Y_EOD2")
    if res:
            return res.group(0)[:-1]
Run Code Online (Sandbox Code Playgroud)

我会得到25作为答案

但是,如果我这样做

    import re
    m = re.compile(".*([0-9]{1,})Y.*")
    res = m.match("AUD3M25Y_EOD2")
    if res:
            return res.groups(0)
Run Code Online (Sandbox Code Playgroud)

我只会得到5.

为什么不同?

它与"全球"选项有什么关系吗?(很像s /// g in vi)

Nia*_*rne 6

在你的比赛中,第一个.*是贪婪的,它尽可能匹配,包括数字.如果你不那么贪心,它会起作用:

 .*?([0-9]{1,})Y.*
Run Code Online (Sandbox Code Playgroud)

(PS我认为这个贪婪的问题并没有使它成为re.search和re.match的公平比较)

  • 我也会将`{1,}`更改为`+`,因为`+`具体意味着一个或多个.虽然我在,但是[0-9]`会更好地显示为`\ d`.可能只是我,但我发现`.*?(\ d +)Y.*`比`.*?([0-9] {1,})更可读.*.*`... (2认同)