42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界

网友投稿 222 2022-11-26

42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界

第七课 正则中的分组 # 分组 # 正则表达式中用一对圆括号括起来的部分被称为一个分组 # '(\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和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 > '''

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中Lambda表达式的进化之路详解
下一篇:利用DriverWorks开发工具实现PXI总线数据采集卡的设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~