Python 之搜索、匹配与贪婪

Python 之搜索、匹配与贪婪

本博客就简单的例子展开讨论,如令字符串 data = ‘Thu Feb 15 17:46:04 2007::[email protected]::271591857-4-4’ ,需要与data信息中匹配出字符串 ‘271591857-4-4’ .

  • 分析寻找的字符为三个由连字符分隔的整数,所以对正则表达式的需求之一:\d+-\d+-\d+ ; (正则式表示:任何数值的数字(至少一个)后面跟着一个连字符,然后是多个数字、另一个连字符,最后是一个数字集)
  • 代码分析(1)–搜索search就可以直接匹配结果
data = 'Thu Feb 15 17:46:04 2007::[email protected]::271591857-4-44'
patt1 = '\d+-\d+-\d+'
m1 = re.search(patt1,data)

结果得到:

271591857-4-44

但是match尝试失败,因为匹配是从字符串的起始部分开始,而要匹配的放在末尾。

  • 代码分析 (2) – 使用 .+ 和match,使用惰性匹配, ‘.+\d+-\d+-\d+’ , “.+”获取从字符串起始位置开始的全部单个字符,此处要的并非整个字符串,使用圆括号对匹配的内容进行分组 .+(\d+-\d+-\d+)。
data = 'Thu Feb 15 17:46:04 2007::[email protected]::271591857-4-44'
patt2 = '.+\d+-\d+-\d+'
patt3 = '.+(\d+-\d+-\d+)'
m2 = re.match(patt2,data)
m3 = re.match(patt3,data)

结果得到:

m2.group()='Thu Feb 15 17:46:04 2007::[email protected]::271591857-4-44'
m3.group()= 7-4-44  #\d仅表示一个数,故匹配得到7

这里写图片描述

  • 代码分析 (3) –使用非贪婪 “?”,该字符要求正则表达式引擎匹配尽可能少的字符,可以简单理解为 ?字符操作的字符部分不在结果中显示
data = 'Thu Feb 15 17:46:04 2007::[email protected]::271591857-4-44'
patt4 = '.+?(\d+-\d+-\d+)'
m3 = re.match(patt4,data)

结果为:

271591857-4-44

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34734303/article/details/80463442