python中正则表达式的分组和字符串匹配-创新互联

这篇文章主要为大家分享python中正则表达式分组和字符串匹配的使用方法。文中还介绍了使用findall和finditer函数查找所有匹配正则表达式的字符串的方法,希望大家通过这篇文章能有所收获。

10年积累的成都网站制作、成都做网站、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有巴里坤哈萨克免费网站建设让你可以放心的选择与我们合作。
# 分组
# 正则表达式中用一对圆括号括起来的部分被称为一个分组
# '(\d\d\d)-(\d\d)'

import re

'''
1. 只有圆括号括起来的部分才算一组,如果正则表达式中既有被圆括号括起来的部分,
也有未被圆括号括起来的部分,那么只将圆括号括起来的部分算一组
2. group方法,如果不指定参数,会返回匹配的整个字符串,如果加参数,会返回指定
分组的字符串,组索引从1开始
3. groups方法,以元组形式返回匹配的所有分组
4. 分组的索引是从1开始的 
'''
# 分3组  3个数字-4个数字-2个小写字母
m = re.match('(\d{3})-\d{4}-[a-z]{2}','123-4567-xy')
print(m)       # 
print(m.groups())  # ('123',)
print(m.group())  # 123-4567-xy
print(m.group(1))  # 123
print('-------------')
m = re.match('(\d{3})-(\d{4})-[a-z]{2}','123-4567-xy')
print(m)         # 
print(m.groups())  # ('123', '4567') 这个是返回一个元组 只要是分组里面的就放在元组里
print(m.group())  # 123-4567-xy
print(m.group(1)) # 123
print(m.group(2)) # 456
print('----------')
m = re.match('(\d{3})-(\d{4})-([a-z]{2})','123-4567-xy')
print(m)      # 
print(m.groups())  # ('123', '4567', 'xy')
print(m.group())  # 123-4567-xy
print(m.group(1))  # 123
print(m.group(2))  # 456
print(m.group(3))  # xy
print('-----------')
m = re.match('(\d{3}-\d{4})-([a-z]{2})','123-4567-xy')
print(m)       # 
print(m.groups())  # ('123-4567', 'xy')
print(m.group())   # 123-4567-xy
print(m.group(1))  # 123-4567
print(m.group(2))  # xy
# 匹配字符串的起始和结尾以及单词边界
'''
"^":匹配字符串的开始
"$":匹配字符串的结束
"\b":匹配单词边界

单词边界:是指空格或标点符号
" hello?"  这个左右2侧都有边界
" world0"  这个表示左侧有边界,右侧没有边界
'''
import re
# "The"必须在字符串的开始才会搜索到
m = re.search('The', 'abc The.')
print(m)   # 
m = re.search('^The', 'The bus.')
print(m)   # 

# The必须在字符串的结尾才会搜索到
m = re.search('The$','The end.')
print(m)   # None
m = re.search('The$','end.The')
print(m)   # 

print("---------------")
# 要求'this'左侧必须有边界才能搜索到
m = re.search(r'\bthis',"What's this?")   # 不使用r里面的\b就会给你转义了
print(m)   # 

m = re.search(r'\bthis',"this is a bus.")
print(m)    # 

m = re.search(r'\bthis'," is a bus.")
print(m)    # 

m = re.search(r'\bthis',"1234this is a bus.")
print(m)   # None

m = re.search(r'\bthis\b',"What's this123")
print(m)   # None
# 使用findall和finditer函数查找所有匹配正则表达式的字符串

'''
findall:通过列表返回所有满足条件的字符串,DOM   这是所有结果一起返回
finditer:将搜索结果通过一个迭代器返回,SAX    这个不是所有的返回
'''

import re
s = '12-a-abc54-a-xyz---78-A-ytr'
result = re.findall(r'\d\d-[a]-[a-z]{3}',s)
print(result)                  # ['12-a-abc', '54-a-xyz']
result = re.findall(r'\d\d-[aA]-[a-z]{3}',s)  # 这一步里面的 [aA] 也是忽略大小写
print(result)                # ['12-a-abc', '54-a-xyz', '78-A-ytr'] 

result = re.findall(r'(\d\d-[aA])-([a-z]{3})',s)  # 分组返回 拆成一个组
print(result)                # [('12-a', 'abc'), ('54-a', 'xyz'), ('78-A', 'ytr')]
s1 = '12-a-abc54-a-xYz---78-A-ytr'
result = re.findall(r'\d\d-a-[a-z]{3}',s1,re.I)  # 可以加第三个参数 第三个参数的位置 可以忽略大小写 re.I 这个就是忽略大小写
print(result)                # ['12-a-abc', '54-a-xYz', '78-A-ytr']

it = re.finditer(r'(\d\d)-a-([a-z]{3})',s,re.I)
for result in it:
   print(result.group(),end=' <')
   groups = result.groups()
   for i in groups:
     print(i, end = ' ')
   print('>')

'''
12-a-abc <12 abc >
54-a-xyz <54 xyz >
78-A-ytr <78 ytr >

'''

以上就是python中正则表达式分组和字符串匹配的使用方法,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注创新互联行业资讯!

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:python中正则表达式的分组和字符串匹配-创新互联
本文来源:http://azwzsj.com/article/eopei.html