| 字符 | 含义 | |
| ^ | 以开头什么,如:^1[3456789]\d{9},以1开头第二位可以是3,4,5,6,7,8,9中任意一位,最后为9位数据 | |
| $ | 代表以什么结尾,如提起身份证以X为结尾的子字符串,(\d{17}X)$ | |
| * | 代表任意多个,可以没有,可以是n多个。 | |
| ? | 正则默认是从右贪婪匹配,如:
abababb取出两个b之间的字符:.*a(.*)a.* 输出结果: 因为从右边匹配,第一个b和第二个b直接没有东西,(.*)表示任意字符任意多个。用:.*?b(.*)b.* 输出结果为:abab 加了问号不做贪婪匹配,是从左到右找最长的子串。从做左边第一个b开始到最后一个b结束中间的字符
|  |
| + | +号代表大于1个,比如abababb用 .*a(.*)a.* 匹配出来为空,想匹配至少中间有一个字符的,可以用:
.*b(.+)b.* 匹配结果为:ab
|  |
| {3} | 代表等于3位,如:
abababb,匹配正则:
.*b(.{3})b. 匹配结果为:aba。
|  |
| {3,} | 代表大于3位
abababb,匹配正则:
.*b(.{3,})b.* 匹配结果为:abab。
|
import re
line = "abababb"
matchObj = re.match(r'.*b(.{3,})b.*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
matchObj.group(1) : abab
|
| {3,6} |
代表大于3位,小于6位 .*b(.{3,6})b.* 匹配结果为:abab。
用.*b(.{5,6})b.* 搜索输出无
|
import re
line = "abababb"
matchObj = re.match(r'.*b(.{3,6})b.*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
matchObj.group(1) : abab
matchObj = re.match(r'.*b(.{5,6})b.*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
No match!!
|
| | |
或的关系 如:^1[3456789]\d{9},以1开头第二位可以是3,4,5,6,7,8,9中任意一位,最后为9位数,
也可以用:^1[3|4|5|6|7|8|9]\d{9}
|
import re
line = "15110154567"
matchObj = re.match(r'(^1[3456789]\d{9})', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
import re
line = "15110154567"
matchObj = re.match(r'(^1[3|4|5|6|7|8|9]\d{9})', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| [] | 代表【】中的任意一个如手机号:^1[3456789]\d{9}, | |
| [^] | 代表只要不是括号中的都满足条件。如手机号码为:
15110154567
用 ^1[^3456789]\d{9} 输出为无,
用 ^1[^3|4|5|6|7|8|9]\d{9} 输出为无,
|
import re
line = "15110154567"
matchObj = re.match(r'(^1[^3|4|5|6|7|8|9]\d{9})', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
import re
line = "15110154567"
matchObj = re.match(r'(^1[^3456789]\d{9})', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| [a-z] | 代表区间。如[a-z],[A-Z],[0-9],[\u4E00-\u9FA5]汉字区间编码,如手机号:^1[3456789]\d{9},^1[3456789][0-9]{9}都可以,[0-9]相当于\d,也可以匹配字符,汉字等区间。 |
line = "15110154567"
matchObj = re.match(r'(^1[3456789][0-9]{9})', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| . | 代表任意字符,也可以是空,如示例:输出为空 |
import re
line = ""
matchObj = re.match(r'.*', line)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match!!")
|
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。如右边输出结果为换行符, |
import re
line = " " \
"d1"
matchObj = re.match(r'.*?(\s+).*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。左右边输出结果为:dl。 |
import re
line = " " \
"d1"
matchObj = re.match(r'.*?(\S+).*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| \w |
\w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字,如右边用非贪婪匹配输出为:d1z
|
import re
line = "d1z~~~,,,^^^_ =+哈哈哈"
matchObj = re.match(r'.*?(\w+).*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
matchObj.group(1) : d1z
|
| \W |
\W 匹配特殊字符,即非字母、非数字、非汉字、非_
用非贪婪匹配输出为: ~~~,,,^^^
|
import re
line = "d1z~~~,,,^^^_ =+哈哈哈"
matchObj = re.match(r'.*?(\W+).*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
matchObj.group(1) : ~~~,,,^^^
|
| [\u4E00-\u9FA5] | 匹配汉字 如右边输出结果:matchObj.group(1) : 哈哈哈 |
import re
line = "d1z~~~,,,^^^_ =+哈哈哈"
matchObj = re.match(r'.*?([\u4E00-\u9FA5]+).*', line)
if matchObj:
print("matchObj.group(1) : ", matchObj.group(1))
else:
print("No match!!")
|
| () | 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 | |
| \d | 代表数据,用\d 或者 [0-9] | |