1.字符集
代码语言:javascript
复制[abc] : 匹配a/b/c中的任一字符
[a-z] : 匹配a-z之间的任一字符
[^b-z] : 匹配非b-z之间的任一字符
2.概括字符集
代码语言:javascript
复制d : 数字(匹配到一个元素)
D : 非数字
w : 字母
W : 非字母
s :不可见字符(空格、制表符t、垂直制表符v、回车符r、换行符n、换页符f)
S : 不是不可见字符
import re
target = '点赞数:12'
result = re.findall('d', target) # 这一行中的d表示只要该位置上的字符是数字,就匹配成功,返回结果,一次只表示一个字符
print(result)
》['1','2']
3.量词
- findall("匹配规则",需匹配的字符串),全部搜索,返回搜索到的所有字符串。
- match() : 若子字符串头部首个的元素不匹配,则返回None,只有头部的第一个元素匹配时,才继续匹配并返回第一个匹配的字符串的re.Match对象,匹配的结果用.group()方法查看。
- search(): 从头匹配,匹配到第一个符合re的值之后返回re.Match对象,并不继续匹配下去,匹配的结果用.group()方法查看。
- 常用findall() 或 search()方法。
代码语言:javascript
复制{3} : 前面的字符出现三次
{3,8} : 前面的字符出现3-8次
? : 前面的字符出现0/1次 (非贪婪)
:前面的字符出现1/无限次 (贪婪)
* :前面的字符出现0/无限次
import re
content = '点赞数:12'
result = re.findall('d{1,10}', content)# 这一行中的d表示一个数字字符,{1,10}表示这个d出现1‐10次都匹配成功,只要点赞数在0‐9999999999之间都可以匹配出来。
# 同样也可以这样写:
result = re.findall('d ', content)
print(result)
》['12']
4.锚字符
- . : 匹配除换行符外的所有符号
- .* : 匹配任意多个除换行符外的所有符号
代码语言:javascript
复制^ : 以...字符开头
$ : 以...字符结尾
5.组
代码语言:javascript
复制(d ) : 返回()内匹配成功的字符。
1.加括号
import re
content = '发布于2020/12/23'
result = re.findall('.*?(d.*d)', content) # 这一行的.*表示匹配除换行符外的任意多个字符,?表示非贪婪匹配
# (d.*d)表示一个组,以数字开头,以数字结尾,.*表示中间可以是除换行符以外的任意多个字符
# 最终返回的结果就是括号内匹配到的结果。
print(result)
》['2020/12/23']
2.不加括号
import re
content = '发布于2020/12/23'
result = re.findall('.*?d.*d', content)
print(result)
》['发布于2020/12/23']
6.re.sub('待匹配字符串', '待替换字符串',content)
代码语言:javascript
复制import re
content = 'python PHP java c javascript java php'
result = re.sub('php', 'python', content,flags=re.I)
print(result)
# python python java c javascript java python
count= : 默认是全部替换,=几,就替换多少个查找到的字符。
re.I : 不区分大小写。
sub方法设计的精妙之处,就是sub的第二个参数可以是一个函数 (将匹配的结果以参数的形式传递给函数)
代码语言:javascript
复制import re
def judge(value):
value = value.group() # 用group方法获取到匹配结果,以下逻辑是对value进行逻辑判断
if int(value) < 60:
return '不及格'
elif int(value) < 80:
return '中'
elif int(value) < 90:
return '良'
else:
return '优'
content = '小明:59 小红:66 小白:83 小绿:98 小王:100'
result = re.sub('d ', judge, content)
# 这里sub的第二个参数就是一个函数judge,第一个参数匹配到的结果会作为value传递进judge函数中,从而在judge中可以对他进行判断,函数的返回值将会替换掉匹配结果。
print(result)
#小明:不及格 小红:中 小白:良 小绿:优 小王:优