42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界相关的知识,希望对你有一定的参考价值。
第七课 正则中的分组
# 分组
# 正则表达式中用一对圆括号括起来的部分被称为一个分组
# ‘(ddd)-(dd)‘
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) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
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) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
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) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
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) # <re.Match object; span=(0, 11), match=‘123-4567-xy‘>
print(m.groups()) # (‘123-4567‘, ‘xy‘)
print(m.group()) # 123-4567-xy
print(m.group(1)) # 123-4567
print(m.group(2)) # xy
第八课 正则中匹配字符串的起始和结尾以及单词边界
# 匹配字符串的起始和结尾以及单词边界
‘‘‘
"^":匹配字符串的开始
"$":匹配字符串的结束
"":匹配单词边界
单词边界:是指空格或标点符号
" hello?" 这个左右2侧都有边界
" world0" 这个表示左侧有边界,右侧没有边界
‘‘‘
import re
# "The"必须在字符串的开始才会搜索到
m = re.search(‘The‘, ‘abc The.‘)
print(m) # <re.Match object; span=(4, 7), match=‘The‘>
m = re.search(‘^The‘, ‘The bus.‘)
print(m) # <re.Match object; span=(0, 3), match=‘The‘>
# The必须在字符串的结尾才会搜索到
m = re.search(‘The$‘,‘The end.‘)
print(m) # None
m = re.search(‘The$‘,‘end.The‘)
print(m) # <re.Match object; span=(4, 7), match=‘The‘>
print("---------------")
# 要求‘this‘左侧必须有边界才能搜索到
m = re.search(r‘this‘,"What‘s this?") # 不使用r里面的就会给你转义了
print(m) # <re.Match object; span=(7, 11), match=‘this‘>
m = re.search(r‘this‘,"this is a bus.")
print(m) # <re.Match object; span=(0, 4), match=‘this‘>
m = re.search(r‘this‘,"<this> is a bus.")
print(m) # <re.Match object; span=(1, 5), match=‘this‘>
m = re.search(r‘this‘,"1234this is a bus.")
print(m) # None
m = re.search(r‘this‘,"What‘s this123")
print(m) # None
第九课 正则中使用findall和finditer函数查找所有匹配的结果
# 使用findall和finditer函数查找所有匹配正则表达式的字符串
‘‘‘
findall:通过列表返回所有满足条件的字符串,DOM 这是所有结果一起返回
finditer:将搜索结果通过一个迭代器返回,SAX 这个不是所有的返回
‘‘‘
import re
s = ‘12-a-abc54-a-xyz---78-A-ytr‘
result = re.findall(r‘dd-[a]-[a-z]{3}‘,s)
print(result) # [‘12-a-abc‘, ‘54-a-xyz‘]
result = re.findall(r‘dd-[aA]-[a-z]{3}‘,s) # 这一步里面的 [aA] 也是忽略大小写
print(result) # [‘12-a-abc‘, ‘54-a-xyz‘, ‘78-A-ytr‘]
result = re.findall(r‘(dd-[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‘dd-a-[a-z]{3}‘,s1,re.I) # 可以加第三个参数 第三个参数的位置 可以忽略大小写 re.I 这个就是忽略大小写
print(result) # [‘12-a-abc‘, ‘54-a-xYz‘, ‘78-A-ytr‘]
it = re.finditer(r‘(dd)-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 >
‘‘‘
以上是关于42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界的主要内容,如果未能解决你的问题,请参考以下文章
Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异