字符 |
含义 |
|
^ |
以开头什么,如:^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] |
|