版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
字符转义
正则中的特殊符号:
. * + ? ^ $ [] {} () | \
正则表达式如果匹配特殊字符需要加 \ 表达转义
raw字串 :
原始字符串对内容不解释转义,就表达内容原本意义,在字符串前加r
区别 | 表达式 | 目标字 |
---|---|---|
正则表达式 | ‘$\d+’ | “$10” |
python | “\$\d+” | “$10” |
raw字符串 | r"$\d+" | “$10” |
贪婪与非贪婪
贪婪模式: 正则表达式的重复匹配总是尽可能多的向后匹 配更多内容
* + ? {m,n}
非贪婪(懒惰模式): 尽可能少的匹配内容(在贪婪模式后加?即是非贪婪模式)
*? +? ?? {m,n}?
子组
可以使用()为正则表达式建立子组,子组可以看做是正则表达式内部操作的一个整体
- 子组是在正则表达式整体匹配到内容的前提下才会发挥作 用,它不影响正则表达式整体去匹配目标内容这一原则
作用
- 作为内部整体可以改变某些元字符的行为
re.search(r"(ab)+\d+",“ababab1234”).group()
‘ababab1234’
re.search(r"\w+@\w+.(com|cn)",“[email protected]”).group()
‘[email protected]’ - 子组在某些操作中可以单独提取出匹配内
re.search(r"(https|http|ftp)://\S+",“https://www.baidu.com”).group(1)
Out[121]: ‘https’
子组使用注意事项
- 一个正则表达式中可以有多个子组
- 子组一般由外到内,由左到右称之为第一,第二 第三。。。。子组
- 子组不能重叠,嵌套也不宜很多
捕获组 和 非捕获组
格式 : (?Ppattern)
示例:
re.search(r"(?Pab)cdef",‘abcdefghti’).group(‘dog’)
Out[130]: ‘ab’
作用 : 可以通过组名更方便获取某组内容
正则表达式设计原则
- 正确性 ,能正确匹配到目标内容
- 排他性 ,除了要匹配的内容,尽可能不会匹配与到其他 内容
- 全面性 ,需要对目标的各种情况进行考虑,做到不遗漏