版权声明:本文为博主原创文章,若有错误之处望大家批评指正!转载需附上原文链接,谢谢! https://blog.csdn.net/summer_dew/article/details/86577226
【资源】
【特殊字符】
常用 | 功能 | 说明 |
---|---|---|
“^” | 开头 | “^x”,以x字符开头 |
“$” | 结尾 | “x$”,以x字符结尾 |
“.” | 任意字符(≥0) | |
“()” | 提取子串 | math_obj.group(1) #匹配成功后,拿出第一个括号里的子串 |
“?” | 非贪婪匹配 | 详细说明 |
“|” | 或者 | |
“[]” | 1. 中括号里的任意一个 2. 可以用区间 3. 中括号里的^代表非 4. 中括号里的字符没有特殊意义 |
1. "[abcd]" 2. "[0-9a-z]" 3. “[^1]“表示≠1 4. “[.*]”,表示字符”.*”,不表示任意字符并重复多次 |
【字符】
名称 | 说明 |
---|---|
“\s” | 空格 |
“\S” | 与"\s"相反,只要不是空格都可以 |
“\w” | 为任意字符,等同于[A-Za-z0-9_] |
“\W” | 与"\w"相反,不为A-Z、a-z、0-9 |
“[\u4E00-\u9FA5]” | 汉字 |
“\d” | 数字 |
【出现次数】
名称 | 功能 | 说明 |
---|---|---|
“*” | 重复次数 | “x*”,x可以重复任意多次(x出现≥0次) |
“+” | 至少一次 | “x+”,x至少出现一次 |
“{2}” | 出现次数 | “x{2}”,x出现2次 |
“{2, }” | 出现次数 | “x{2,},x出现2次以上” |
“{2,5}” | 出现次数 | “x{2,5}”,x出现2-5次 |
【贪心Greedy】将匹配尽可能多的重复
【非贪婪模式】"?()"
:()里的字符从右往左第一个
>>> import re
>>> line = "texttexttteexxxtt"
# 模式串".*(t.*t).*"
# 【猜想】满足条件的所有可能:
# 'texttexttteexxxtt'
# 'ttexttteexxxtt'
# 'texttteexxxtt'
# 'ttteexxxtt'
# 'tteexxxtt'
# 'teexxxtt'
# 'tt'
# 't'
# 'tt'
# 'texttexttteexxxt'
# 'texttexttt'
# 'texttextt'
# 'texttext'
# 'textt'
# 'text'
>>> match_obj = re.match(".*(t.*t).*", line) #默认贪婪
>>> match_obj.group(1)
'tt'
>>> match_obj = re.match(".*?(t.*t).*", line) #左边界非贪婪
>>> match_obj.group(1)
'texttexttteexxxtt'
>>> match_obj = re.match(".*(t.*t?).*", line) #右边界非贪婪
>>> match_obj.group(1)
't'
>>> match_obj = re.match(".*?(t.*t?).*", line) #左右边界非贪婪
>>> match_obj.group(1)
'texttexttteexxxtt'
例子
【提取年月日】 "(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))"
line = "2001年6月1日"
line = "2001/6/1"
line = "2001-6-1"
line = "2001-06-01"
line = "2001-06"