python - 请帮我看下这段正则表达式出错的原因

查看:139
本文介绍了python - 请帮我看下这段正则表达式出错的原因的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

为了捕获在日期和末尾的部分之间内容。 日期有包含日 和 不包含两种格式。
不包含的格式下后续内容不会以数字开头。
例子:

10月11日测试内容1部分 
10月11日1234测试内容2部分   //待捕获的内容可以数字开头
8月31测试内容1部分          //待捕获的内容不会以数字开头

我写的正则为(?<=\d{1,2}月\d{2}日?)\w+(?=部分)

获得的结果为

日测试内容1     //错误 多个日
日1234测试内容2 //错误 多个日
测试内容1

(?<=\d{1,2}月\d{2}日|\d{1,2}月\d{2})\w+(?=部分) 这种写法结果一样

(?<=\d{1,2}月\d{2}日)\w+(?=部分) 这种写法只能捕获前两个

请教正确写法

还有就是 如何在python中写出这段正则,
re.compile(r"(?<=d{1,2}'月'd{2}'日'?)w+(?='部分)")
提示raise error("look-behind requires fixed-width pattern")

解决方案

python 的正则后向预查不支持变长模式,只能匹配固定长度。
用分组匹配就好了,效率比较高。

python3

>>> t='''
10月11日测试内容1部分 
10月11日1234测试内容2部分   //待捕获的内容可以数字开头
8月31测试内容1部分          //待捕获的内容不会以数字开头
'''
>>> import re
>>> ptn2=re.compile(r'\d{1,2}月\d{2}日?(\w+)(?=部分)')
>>> ptn2.findall(t)
['测试内容1', '1234测试内容2', '测试内容1']
>>> 

这篇关于python - 请帮我看下这段正则表达式出错的原因的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆