标题可能不太清晰,案例是这样的:
content =
MAY 05
...................
.................
DA
MAY 06
................
.................
CD
MAY19
.................
.................
DA
MAY 31
.................
.................
CD
想使用正则表达式分开每个事件:
findParagraph = re.compile('(MAY+\s?\d\d.*?\nDA\n|MAY+\s?\d\d.*?\nCD\n)',re.S)
Pargaragraphlist = re.findall(findParagraph,content)
for pargaragraph in Pargaragraphlist:
print(pargaragraphlist)
print('----------------------------------------------------------')
结果为:
MAY 05
...................
.................
DA
----------------------------------------------------------
MAY 06
................
.................
CD
MAY19
.................
.................
DA
----------------------------------------------------------
MAY 31
.................
.................
CD
----------------------------------------------------------
中间部分的MAY 06 和 MAY19就黏一起了, 有什么解决方法吗
content = '''MAY 05
...................
.................
DA
MAY 06
................
.................
CD
MAY19
.................
.................
DA
MAY 31
.................
.................
CD'''
import re
reg = re.compile('(([A-Z]+\s*\d+)[\s\S]*?(DA|CD))',re.S)
lst = re.findall(reg,content)
for i in lst:
print(i)
print('----------------------------------------------------------')
来看看你的正则 (MAY+\s?\d\d.*?\nDA\n|MAY+\s?\d\d.*?\nCD\n)
(MAY+\s?\d\d.*?\nDA\n|MAY+\s?\d\d.*?\nCD\n)
把这个正则拆分
MAY+\s?\d\d.*?\nDA\n part1
或
MAY+\s?\d\d.*?\nCD\n part2
先看part1
MA Y+ \s? \d \d .*? \n DA \n
首先Y后边的+没有意义,在没有()分组或者[]定义字符集的时候,长度修饰只针对前边一个字符,也就是说,+只修饰了Y的长度
然后收.*?\nDA\n,在正则中,虽然有|进行或匹配,但是,还是有顺序的
[i for i in re.findall('ab.*?c|ab.*?d','abcdabxdabdc')]
Out: ['abc', 'abxdabdc']
参考这个例子,ab.*?c|ab.*?d
abcdabxdabdc匹配这个正则,会从第一个字符开始寻找两个表达式,第一个表达式 ab.*?c匹配成功
abc 被剥离,剩余字符串 dabxdabdc 继续匹配
这个时候问题来了,d abxd abd c 我们期望的结果是这样
然而,ab.*?c 的优先级略高于 ab.*d 所以,结果就成了 abxdabdc
[i for i in re.findall('ab.*?(?:c|d)','abcdabxdabdc')]
Out: ['abc', 'abxd', 'abd']
在看这个正则 ab.*?(?:c|d)
c和d的匹配定义是同级的(其实也有优先级,不过相对前边的正则表达式,在这里他们的优先级无限降低)
这个表达式才是我们期望的结果
可以参考https://blog.csdn.net/superwfei/article/details/51753127?spm=1001.2014.3001.5502,这是老顾自己整理的正则学习内容
如有帮助,还望采纳
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m