本文中基础知识没有介绍,只是将自己不懂的东西稍加记录,以复习记忆。
match(),finditer(),search()为一组,返回的是Match Object对象;
其拥有group()方法:
当匹配的正则表达式没有小括号时,group(0)=group(),代表整个正则表达式;
当有括号时:
group(0)=group(),其他括号按照从外向内组号增加:
import re
str='ssss2.168.1.11sssss'
p=re.compile(r'(\w+(\d+)\.)')
print(p.search(str).group())
#这是关键点:group(0)=group()=group(1):输出ssss2. 看懂了吗???
#group(2):输出2
findall()返回一个列表:
无分组就是整个匹配,这个不提;
有分组时,默认没有整体结果而是一个分组的结果,如果有多个小括号分组,将会把多个分组组合成元祖作为列表find的一项,类似下面:
re.findall(r"(\d+)@(\w+).com", content)
[('2345678', '163'), ('2345678', '163'), ('345678', '163')]
如果想匹配整个结果,2个方法:
1是将整个正则表达式小括号括起来;
2是用?:,具体请看收藏夹关于(?# ?:)等具体用法。
另外关于finditer(),返回的是迭代器,到底是啥呢?
import re
str='ssss2.168.1.11sssss'
p=re.compile(r'\.\d+')
match=p.finditer(str)
print(match)#输出结果是:<callable_iterator object at 0x000000000AA471D0>,这就是一个迭代器
#怎么访问呢?
#一种方法是:
#next(match)#输出是<_sre.SRE_Match object; span=(5, 9), match='.168'>
#继续next(match)访问下一个匹配的结果
#或者用for:
for i in match:
print(i)#<_sre.SRE_Match object; span=(5, 9), match='.168'>
x想访问其中匹配的结果还是要用group():i.group()
懂了嘛??不懂得话,留言互相探讨一波~