1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python正则表达式r'(.*)are(.*?).*’具体是什么意思呢?

Python正则表达式解答

小编写这篇文章的一个主要目的,主要是给大家去做一个解答,解答的内容是关于Python正则表达式的内容,主要是会涉及到r'(.*)are(.*?)\s.*’这些相关的知识性内容,它也是比较的晦涩难懂的,下面给大家具体解释下。

Python正则表达式r'(.*)are(.*?).*'具体是什么意思呢?

Python3的正则表达式

在学习Python3的正则表达式的时候遇到一个例子。

#!/usr/bin/python3
import re
line="Cats are smarter than dogs"
#.*表示任意匹配除换行符(n、r)之外的任何单个或多个字符
#(.*?)表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj=re.match(r'(.*)are(.*?).*',line,re.M|re.I)
if matchObj:
   print("matchObj.group():",matchObj.group())
   print("matchObj.group(1):",matchObj.group(1))
   print("matchObj.group(2):",matchObj.group(2))
else:
   print("No match!!")

运行结果为:

matchObj.group():Cats are smarter than dogs
matchObj.group(1):Cats 
matchObj.group(2): smarter 

这个例子主要的理解为r'(.*)are(.*?).*’,以下为我查询资料之后所得到的个人理解以及试验。

分组匹配

前面的r比较好理解,表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。但是这个例子中字符串里没有反斜杠,所以这个r可有可无。

(.*)第一个匹配分组,.*代表匹配除换行符之外的所有字符。

(.*?)第二个匹配分组,.*?后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符。

后面的一个.*没有括号包围,所以不是分组,匹配效果和第一个一样,但是不计入匹配结果中。

综上所述以一种通俗易懂的描述就是将字符串以are为中断分为几部分,(.*)因为是贪婪的,所以返回的是所有满足条件的内容太,(.*?)为非贪婪模式,所以返回第一个满足要求的内容或没有匹配成功。

更多示例

这句话如果不好理解就看看下面这个例子。

#!/usr/bin/python3
import re
#line="Cats are smarter than dogs"
line="a a Cats are Cats are smarter than dogs"
#.*表示任意匹配除换行符(n、r)之外的任何单个或多个字符
#(.*?)表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj=re.match(r'(.*?)are(.*).*',line,re.M|re.I)
if matchObj:
   print("matchObj.group():",matchObj.group())
   print("matchObj.group(1):",matchObj.group(1))
   print("matchObj.group(2):",matchObj.group(2))
else:
   print("No match!!")

输出结果:

matchObj.group():a a Cats are Cats are smarter than dogs
matchObj.group(1):a a Cats 
matchObj.group(2): are smarter than dogs

group(1)对应第一个括号的条件,我理解为最后满足are分段的前面的所有内容,如果将第一个括号改为(.*?)就是第一个are的前面内容,经过验证确实是这样的,这里就不贴程序了可以自行验证。

group(2)对应第二个括号的条件:因为我将这里第一个括号的内容添加了?所以第一个括号索引的内容就是第一个are前面的内容,第二个括号就在当前这个are之后开始索引,在这里我没有加不加?所以输出为输出后面出去.*条件的所有内容。

可以自己尝试一个多加几个are在语句中然后判断语句修改有无?或者括号进行观察效果。

到此为止,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7219.html