如果我这样做
import re
m = re.compile("[0-9]{1,}Y")
res = m.search("AUD3M25Y_EOD2")
if res:
return res.group(0)[:-1]我会得到25分作为答案
但是,如果我这样做了
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)
发布于 2012-02-07 13:23:37
在您的匹配中,第一个.*是greedy,它尽可能多地匹配,包括数字。如果你让它不那么贪婪,它就会起作用:
.*?([0-9]{1,})Y.*(另外,我认为这个贪婪的问题不能作为re.search和re.match的公平比较)
发布于 2012-02-07 13:23:12
请先阅读文档。正如你所期望的,它有答案。
re.search
遍历字符串,查找正则表达式模式产生匹配的位置,并返回相应的匹配对象。如果字符串中没有与模式匹配的位置,则返回
None;请注意,这不同于在字符串中的某个位置查找长度为零的匹配。
re.match
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回
None;请注意,这不同于零长度匹配。
注意:如果要在字符串中的任何位置找到匹配项,请改用search()。
此外,在同一页面上,Matching vs. Searching
Python基于正则表达式提供了两种不同的原语操作: match 只在字符串的开头检查匹配,而search只在字符串的任何位置检查匹配(这是默认执行的操作)。
https://stackoverflow.com/questions/9171359
复制相似问题