正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的
如果想查找对应规则的字符串,就可以用正则表达式
python中要使用正则表达式需使用re模块,它是正则表达式在python中的封装
1.匹配的方式:match、search、findall
1.1 match 表示: 从开始的位置进行匹配,即从第一个字符开始匹配,第一个没有匹配到,则整个就不会匹配到
# 匹配特定的字符串 "abc"
import re
re_pattern = r'abc'#写匹配规则式时,要加上转意字符r
res = re.match(re_pattern, "abwofowpqfowfjowefjiwoefabcowof")
print(res)
1.2search 全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果
# search, 全文匹配,如果表达式有多处可以匹配到,只会返回第一个匹配到的结果
res = re.search(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)
1.3findall 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个
# findall, 全部匹配,如果表达式有多处可以匹配到,结果也会返回多个
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.语法
2.1 [abc] 匹配中括号中的任意一个字符
# [abc], 匹配中括号中的任意一个字符
re_pattern = r'[abc]',
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.2 .匹配任意一个字符串 除了 \n
# . 匹配任意一个字符
re_pattern = r'.',
res = re.findall(re_pattern, "abcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.3 \d 匹配数字,相当于[0-9]
# \d 匹配数字 data,相当于[0-9]
re_pattern = r'\d'
res = re.findall(re_pattern, "a123bcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.4 \D 匹配非数字
# \D 匹配非数字 data
re_pattern = r'\D'
res = re.findall(re_pattern, "a@123bcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.5 \w 匹配字母、数字、下划线 相当于[A-Za-z0-9_]
# \w 匹配字母,数字,下划线
re_pattern = r'\w'
res = re.findall(re_pattern, "a@_123bcwofowpqfowfjowefjiwoefabcowof")
print(res)
2.6 \W 反向的, 非匹配字母,数字,下划线
2.7{}匹配花括号当中次数,一般要和其他的规则配合使用
# 匹配花括号当中的数字次, 匹配几次,
re_pattern = r'\d{2}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)
2.8 {2, } 匹配至少 2 次
# {2, } 匹配至少 2 次
re_pattern = r'\w{2,}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)
2.9 {,2} 匹配最多 2 次
# {,2} 匹配最多 2 次
re_pattern = r'\w{,2}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)
2.10 {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次
# {2,4} 匹配 2 -4 次,最少匹配2,最多匹配4次
re_pattern = r'\w{2,4}'
res = re.findall(re_pattern, "aa@_123b&cwofowpqfowfjowefjiwoefabcowof")
print(res)
例子:匹配手机号码
# 如何去匹配一个手机号码
2.11 *匹配0次或者任意次,通配符
# # * 匹配 0 次或者任意次, 通配符,
2.12 + 匹配1次或者任意次数,通配符
# + 匹配 1 次或者任意次, 通配符,
2.13 ? 匹配 0 次或者 1 次,非贪婪模式
# ? 匹配 0 次或者 1 次
re_pattern = r'\d?'
res = re.findall(re_pattern, "aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
print(res)
2.14 ^开头
# ^ 开头
re_pattern = r'^\d'
res = re.findall(re_pattern, "1aa@_123b&cwo17520208510fowpqfowfjowefjiwoefabcowof")
print(res)
2.15 $结尾
# # $结尾
2.16组,findall中是用括号表示
search中用.group()表示
# # 组,如果你要匹配的内容,显示出来不包含首位的字符,可以加上括号
re_pattern = r'#(.*?)#'
res = re.findall(re_pattern, mystr)
print(res)
3.替换 re.sub()
# # 替换 re.sub() 替换操作(正则表达式,替换成的字符串,被替换的字符串)
手机扫一扫
移动阅读更方便
你可能感兴趣的文章