正则表达式

一: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).*

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空弹壳

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值