一:python中re正则表达的用法
1.match 主要用于校验数据的格式
re.match("规则","str")用来匹配的数据
2.search 查询、获取数据(只要匹配到就停止)
re.search("规则","str")用来匹配的数据
re.group()用来获取匹配的数据:
其中1表示第一个括号里面的内容
a="核酸检测结果"
b=".*(核.*?测).*"
print(re.search(b, a).group(1))
=》核酸检测
3.findall 也是查询、获取数据
返回的是列表,跟前两个不一样,不用加group()
re.findall(‘正则’, string, re.S)
a='核酸检测结果:"正常",核酸检测结果:"阴性",核酸检测结果:"阳性",核酸检测结果:"暂无核酸检测结果"。'
result = re.findall('\"(.*?)\"', a, re.S)
print(result)
=》['正常', '阴性', '阳性', '暂无核酸检测结果']
4.sub 替换数据
re.sub(pattern, repl, string, count=0, flags=0)
参数1:pattern
表示正则中的模式字符串。
参数2:repl
就是replacement,表示被替换的字符串,可以是字符串也可以是函数。
参数3:string
表示要被处理和替换的原始字符串
参数4:count
可选参数,表示是要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;
参数5:flags
可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。
new_str = re.sub('\d+', '998', "python = 997, java = 101")
print(new_str)
=》python = 998, java = 998
批量使用时:
"与行|上行|支.$|支行"表示都替换成最后一个
value='核酸与行结果:"上行",:"与行",松州:"松川",抚州,核酸检测结果:"南学"。'
equal_character = ["与行|上行|支.$|支行", "全行|分纠|分行","松州|松川|税州|抚州|杭州","南学|南宁"]
for pattern in equal_character:
value = re.sub(pattern, pattern.split("|")[-1], value)
print(value)
=》核酸支行结果:"支行",:"支行",杭州:"杭州",杭州,核酸检测结果:"南宁"。
二:提取字符串中的中文
正则findall方法一:
b="72xiao小时阴性asd核酸检测结果"
c=re.findall(u"[\u4e00-\u9fa5]+", b, re.S)
string_china="".join(c)
print(string_china)
方法二:
china_char = ""
for char in b:
if '\u4e00' <= char <= '\u9fff':
china_char += char
print(china_char)
=》小时阴性核酸检测结果
方法三:
使用正则:[^\x00-\xff] 表示中文
三:正则语法详解
边界匹配
^ 匹配字符串开头
$ 匹配字符串末尾
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
特殊构造(不分组)
(?:…) (…)的不分组版本,用于|或后接数量词 (?:abc){2} abcabc
(?iLmsux) iLmsux中的每个字符代表正则表达式的一种匹配模式,只能用在正则表达式开头,可选多个 (?i)abc AbC
(?#…) 将#后面的字符当做注释忽略 abc(?#comment)def abcdef
(?=…) 之后的字符串表达式需要匹配才能成功,不消耗字符串内容 a(?=\d) 后面是数字的a
(?!..) 之后的字符串表达式需要不匹配才能成功,不消耗字符串内容 a(?!\d) 后面不是数字的a
(?<=…) 之前的字符串表达式需要匹配才能成功,不消耗字符串内容 (?<=\d)a
前面是数字的a
(?<!..) 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 (?<!\d)a 前面不是数字的a
案例:
1.正则匹配小于等于15的数字
.*?(?<!\d)(1[0-5]|(?<!\d)[1-9])(?!\d).*