python 66:re正则表达式5(全- tcy)
发布日期:2021-06-29 14:48:15 浏览次数:2 分类:技术文章

本文共 2262 字,大约阅读时间需要 7 分钟。

 

目录:

 

分组 2018/12/20组的基础:
1) '('')' 组是由一对圆括号括起来的正则式。2) findall 返回包含在 '()' 中内容,前和后面内容都匹配成功,却并不包含在结果中。3) 子组从左到右从1向上编号可嵌套; 要确定数字,只需计算左括号的左括号字符。  

实例: 

# 实例1:无命名组s = 'aaa111aaa , bbb222 , 333ccc '     #匹配包夹在字母中间的数字re.findall (r'[a-z]+(\d+)[a-z]+' , s ) # ['111']s='aaa111aaa,bbb222,333ccc,444ddd444,555eee666,fff777ggg're.findall( r'([a-z]+)\d+([a-z]+)' , s ) # 找出中间夹有数字的字母 # [('aaa', 'aaa'), ('fff', 'ggg')]re.findall( r'[a-z]+(\d+)([a-z]+)' , s ) # 找出中间是数字后面是字母# [('111', 'aaa'), ('777', 'ggg')]# 实例2:命名组m = re.search(r'(?P
\b\w+\b)', '(((( Lots of punctuation )))' )m.group('word')# 'Lots'm.group(1) # 'Lots'# 实例3:非捕获re.match("([abc])+", "abc").groups() # ('c',)re.match("(?:[abc])+", "abc").groups() # 非捕获组无法检索组匹配内容 # ()s = 'I have a dog , I have a cat're.findall( r'I have a (?:dog|cat)' , s )# ['I have a dog', 'I have a cat']re.findall( r'I have a dog|cat' , s ) # ['I have a dog', 'cat']  将 'I have a dog' 和 'cat' 当成两个规则# 实例4:反向引用-字符串替换时非常有用p = re.compile(r'\b(\w+)\s+\1\b') #RE检测字符串中的双字p = re.compile(r'\b(?P
\w+)\s+(?P=word)\b') #等价p.search('Paris in the the spring').group() # 'the the're.findall( r '(?P
[a-z]+)\d+(?P=g1)' , s ) # 找出被中间夹有数字的前后同样的字母# ['aaa']re.findall( r'([a-z]+)\d+\1' , s ) # ['aaa']s='111aaa222aaa111 , 333bbb444bb33' # 找出完全对称的 数字-字母re.findall( r'(\d+)([a-z]+)(\d+)(\2)(\1)' , s ) # [('111', 'aaa', '222', 'aaa', '111')]# 实例5:条件匹配# '(?( id\name )yes-pattern|no-pattern)' 判断指定组是否已匹配,执行相应的规则# 如id\name 指定组在前面匹配成功执行 yes-pattern 否则执行 no-pattern 的正则式。# 要匹配形如 usr@mail  < usr@mail > s='
  usr2@maill2're.findall( r'\s*(\w+@\w+)\s*' , s ) #一般匹配#['usr1@mail1', 'usr2@maill2']re.findall( r'(<)?\s*(\w+@\w+)\s*(?(1)>)' , s )# [('<', 'usr1@mail1'), ('', 'usr2@maill2' )] 

实例6: 

match = re.match( r'(.*) are (.*?) .*',"Cats are smarter than dogs", re.M|re.I)# (.*) 第1个匹配分组,匹配除换行符之外所有字符# (.*?) 第2个匹配分组,.? 非贪婪模式# .* 不是分组,匹配效果同第1个,不计入匹配结果中if match:print( "group(all)= : ", match.group()) #匹配到的完整文本字符print("group(1)= ", match.group(1))     #得到第一组匹配结果,也就是(.*)匹配到print("group(2)= ", match.group(2))     #得到第二组匹配结果,也就是(.*?)匹配到的else:print("No match!")# group(all)= : Cats are smarter than dogs# group(1)= Cats# group(2)= smarter 

 

转载地址:https://chunyou.blog.csdn.net/article/details/85157147 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python 66:re正则表达式6(全- tcy)
下一篇:python 66:re正则表达式4(全- tcy)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月04日 05时20分22秒