Python(re_group_learning)
2021/10/21 17:09:25
本文主要是介绍Python(re_group_learning),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
""" 正则表达式中的分组: 分组的标识形式:() 分组会默认分配组号(组id): 按照从左到右的顺序去数左括号 第一个左括号的id就为1 match object的和组相关的方法 group(int/str): int: 组id 可以是0, 1, 2... str: 组名 group() == group(0) => 0 代表就是匹配成功的完整结果 group(1) => 只输出组1的匹配结果 group(2) => 只输出组2的匹配结果 groups() => 以元组的形式输出所有组的结果 groupdict() => 我们在给组命名过后,输出所有组的 组名: 匹配结果 \number => 就是引用分组的组号(id) \1 \2 (?…): 这是使用分组的一种语法 后边分组的形式(?xxx) (?:): 在正则表达式中,前边的分组不能被引用 (?aiLmsux:): 和我们前边使用的re中的flags等效: re.A, re.I, re.U, re.S, re.X, re.M (?aiLmsux-imsx:...) : -后跟随的是可选的选项 (?P<name>…): 给分组命名 (?P=name): 反向引用一个命名组合 (?#…): 注释 (?=..): lookahead assertion 正向断言 不消费样式的内容:字符串1(?=字符串2) 在去匹配的时候如果字符串1后边跟的是字符串2,那么匹配成功返回的是字符串1 字符串2不返回,只作为匹配成功的条件 (?!...) negative lookahead assertion 正向断言取反 不消费样式的内容:字符串1(?!字符串2) 在去匹配的时候如果字符串1后边跟的不是字符串2,那么匹配成功返回的是字符串1 字符串2不返回,只作为匹配成功的条件 (?<=...) positive lookbehind assertion 正向后视断定 不消费样式的内容: (?<=字符串2)字符串1 在去匹配的时候如果字符串1前边跟的是字符串2,那么匹配成功返回的是字符串1 字符串2不返回,只作为匹配成功的条件 (?<!...) 不消费样式的内容: (?<!字符串2)字符串1 在去匹配的时候如果字符串1前边跟的不是字符串2,那么匹配成功返回的是字符串1 字符串2不返回,只作为匹配成功的条件 (?(id/name)yes-pattern|no-pattern): 如果给定的 id 或 name 存在,将会尝试匹配 yes-pattern , 否则就尝试匹配 no-pattern , no-pattern可选 如果< 存在那么我们是要匹配> 如果< 不存在那么我们不匹配> id: 组id name: 组名 """ import re str_data = "abcd" pattern = "a(b(c))d" # 两对括号,就由两个分组 match_obj = re.search(pattern, str_data) print(match_obj) print(match_obj.group()) print(match_obj.group(0)) print(match_obj.group(1)) print(match_obj.group(2)) print(match_obj.groups()) print(match_obj.groupdict()) # \number => 就是引用分组的组号(id) str_data = "abcdbcc" pattern = r"a(b(c))d\1\2" print(re.search(pattern, str_data)) # (?:) str_data = "abcdbcc" pattern = r"a(?:b(c))d\1\2" # print(re.search(pattern, str_data)) str_data = "abcd" pattern = "a(?i:BC)d" print(re.search(pattern, str_data)) str_data = "abcd" pattern = r"a(?P<g1>b(?P<g2>c))d" match_obj = re.search(pattern, str_data) print(match_obj) print(match_obj.group("g1")) print(match_obj.group("g2")) print(match_obj.groupdict()) str_data = "abcdbcc" pattern = r"a(?P<g1>b(?P<g2>c))d(?P=g1)(?P=g2)" match_obj = re.search(pattern, str_data) print(match_obj) str_data = "abcdbcc" pattern = r"a(?P<g1>b(?P<g2>c))d(?P=g1)(?P=g2)(?#使用组名引用分组)" match_obj = re.search(pattern, str_data) print(match_obj) str_data2 = "windows10" str_data = "windows98" pattern = "windows(?=10)" print(re.match(pattern, str_data)) print(re.match(pattern, str_data2)) str_data2 = "windows10" str_data = "windows98" pattern = "windows(?!10)" print(re.match(pattern, str_data)) print(re.match(pattern, str_data2)) str_data2 = "windows10" str_data = "windows98" pattern = "(?<=windows)10" print(re.search(pattern, str_data)) print(re.search(pattern, str_data2)) str_data2 = "windows10" str_data = "Linux10" pattern = "(?<!windows)10" print(re.search(pattern, str_data)) print(re.search(pattern, str_data2)) #如果 < 存在那么我们是要匹配 > #如果 < 不存在那么我们不匹配 > #(?(id/name)yes-pattern|no-pattern) pattern = "(<)?\w+@\w+.com(?(1)>|)" str_data = "<user@host.com>" str_data2 = "user@host.com" print(re.search(pattern, str_data)) print(re.search(pattern, str_data2)) pattern = "(?P<g1><)?\w+@\w+.com(?(g1)>|)" str_data = "<user@host.com>" str_data2 = "user@host.com" print(re.search(pattern, str_data)) print(re.search(pattern, str_data2)) """ 1.所有分组的应用: (): """
这篇关于Python(re_group_learning)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型