re.findall的正则参数为什么不能包含元组表达式()或竖线符号,先挖个坑

re.findall 的匹配规则不能包含或关系,例如:

sentence = u"合同生效"
res = re.findall(u"合同(生效|履行).*?", sentence)
print(res)
# ['生效']
instruction = u"基金合同于2020年3月18日生效"
effective_date = re.findall(u"基金合同已?于\d{4}年\d{1,2}月\d{1,2}日正?式?生效", instruction)[0]
print(effective_date)
# 基金合同于2020年3月18日生效

effective_date = re.findall(u"基金合同已?于\d{4}年\d{1,2}月\d{1,2}日(正?式)?生效", instruction)[0]
print(effective_date)
# 可观察到打印结果为空

instruction = u"基金合同于2020年3月18日生效"
effective_date = re.findall(u"基金合同已?于\d{4}年\d{1,2}月\d{1,2}日正式生效|生效", instruction)[0]
print(effective_date)
# 生效
说明,"|"操作的是u"基金合同已?于\d{4}年\d{1,2}月\d{1,2}日正式生效" 和 u"生效"。

能用方括号 [],就不用圆括号加或 (|),比如 [%%﹪]【%%%%%%%】

结论,re.findall不能操作带圆括号的模式,更别谈(x|y)之类的模式,否则可能匹配不到想要的结果。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值