元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字符、数字、下划线或汉字 |
\W | 匹配除字母、数字、下划线或汉字以外的字符 |
\s | 匹配单个的空白符(包括健和换行健) |
\S | 除单个的空白符(包括健和换行健)以外的所有字符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束,单词的分解符通常是空格、标点符号或换行 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
#### 限定符
限定符 | 说明 | 举例 |
---|---|---|
? | 匹配前面的字符零次或一次 | colou?r,该表达式可以匹配colour和color |
+ | 匹配前面的字符一次或多次 | go+gle,该表达式可以匹配的范围从gogle到goo…gle |
* | 匹配前面的字符零次或多次 | go*gle,该表达式可以匹配的范围从ggle到goo…gle |
{n} | 匹配前面的字符n次 | go{2}gle,该表达式值匹配google |
{n,} | 匹配前面的字符最少n次 | go{2,}gle,该表达式范围从google到goo…gle |
{n,m} | 匹配前面的字符最少n次,最多m次 | employe{0,2},该表达式从employ到employee |
#18位的身份证号码
(^\d{18}$)|(^\d{17})(\d|X|x)$
匹配自定义字符:[aeiouAEIOU]
匹配汉字:[\u4e00-\u9fa5]
匹配连续多个汉字:[\u4e00-\u9fa5]+
排除符:[^a-zA-Z]
python math() search() findall()方法
**math():**用于在字符串开始处进行匹配
#pattern:表示模式字符串,由要匹配的正则表达式转换而来
#string:表示要匹配的字符串
#flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写等
re.match(pattern,string,[falgs])
import re
pattern=r'mr_\w+' #模式字符串
string='MR_SHOP mr_shop' #要匹配的字符串
math=re.match(pattern,string,re.I) #匹配字符串,不区分大小写
print("匹配值的起始位置:",math.start())
print("匹配值的结束位置:",math.end())
print("匹配位置的元组:",math.span())
print("要匹配的字符串:",math.string)
print("匹配数据:",math.group())
结果如下
匹配值的起始位置: 0
匹配值的结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配数据: MR_SHOP
**search():**在整个字符串中搜索第一个匹配的值
re.search(pattern,string,[falgs])
import re
xxx=r'\d{4}'
sss="2222sdfsf1232"
math=re.search(xxx,sss).group()
print(math)
#结果
2222
**findall()😗*在整个字符串中搜索所有符合正则表达式的字符串,并以列表形式返回。
re.search(pattern,string,[falgs])
import re
xxx=r'\d{4}'
sss="2222sdfsf1232"
math=re.findall(xxx,sss)
print(math)
#结果
['2222', '1232']
()分组
在findall()时,优先得到的分组中的结果
- 返回字符串中所有非重叠匹配的列表。
- 如果模式中存在一个或多个捕获组,则返回一个组列表;如果模式有多个组,这将是一个元组列表。
- 结果中包含空匹配项。
import re
xxx=r'[1-9]{1,3}(\.[1-9]{1,3}){3}' #将(\.[1-9]{1,3})为一组
sss="129.11.2.3 129.33.22.11"
math=re.findall(xxx,sss)
print(math)
#输出
['.3', '.11']
import re
xxx=r'([1-9]{1,3}(\.[1-9]{1,3}){3})' #将整体为一组
sss="129.11.2.3 129.33.22.11"
math=re.findall(xxx,sss)
print(math)
#输出
[('129.11.2.3', '.3'), ('129.33.22.11', '.11')]
字符串替换
#pattern:表示模式字符串,由要匹配的正则表达式转换而来
#repl:表示要替换的字符串
#string:表示要被查找的原始字符串
#count:可选参数,表示模式匹配后的最大次数,默认值为0,表示替换所有匹配
#flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写等
re.sub(pattern,rel,string,count,flags)
import re
pattern=r'1[34578]\d{9}'
string='中奖号码为:84978981 联系电话为:13611111111'
result=re.sub(pattern,'1××××××××××',string)
print(result)
#结果
中奖号码为:84978981 联系电话为:1××××××××××