正则表达式② 匹配规则
特殊字符匹配
- 如果匹配的目标字符串中包含正则表达式特殊字符,则在表达式中元字符就想表示其本身含义时就需要
进行 \ 处理。 - 特殊字符:. * + ? ^ $ [] () {} | \
贪婪模式和非贪婪模式
-
定义
贪婪模式: 默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如: * + ? {m,n}
非贪婪模式(懒惰模式): 让匹配重复的元字符尽可能少的向后匹配内容。
-
贪婪模式转换为非贪婪模式
在对应的匹配重复的元字符后加 ‘?’ 号即可
正则表达式分组
-
定义
在正则表达式中,以()建立内部分组,子组是正则表达式的一部分,可以作为内部整体操作对象。
-
作用
可以被作为整体操作,改变元字符的操作对象
-
捕获组
捕获组本质也是一个子组,只不过拥有一个名称用以表达该子组的意义,这种有名称的子组即为捕获组。
格式: (?P<name>pattern)
注意:1.一个正则表达式中可以包含多个子组
2.子组可以嵌套但是不宜结构过于复杂
3.子组序列号一般从外到内,从左到右计数
正则表达式匹配原则
-
正确性,能够正确的匹配出目标字符串。
-
排他性,除了目标字符串之外尽可能少的匹配其他内容。
-
全面性,尽可能考虑到目标字符串的所有情况,不遗漏。
"""
示例:匹配规则
"""
#导入re模块
import re
#匹配特殊字符
result=re.findall(r'-?\d+\.\d+',"23,34.5,-9.8,-9") #匹配正小数,负小数
print(result) #['34.5', '-9.8']
#贪婪模式
result=re.findall(r'ab+','abbbbbbb')
print(result) #['abbbbbbb']
#非贪婪模式 + ----> +?
result=re.findall("ab+?","abbbbbbb")
print(result) #['ab']
#子组
result=re.search("(ab)+","ababababab")
print(result.groups()) #ababababab
#捕获子组
result=re.search(r"(?P<xing>\w+)","王思聪")
print(result.group('xing')) #王思聪