我有一个txt文件,包含多行。我的结果跨越多行。
例如,我的数据可以简化为以下内容:
target_str =
x:-2.12343234
aaa:-3.05594480202
aaa:-3.01292995004
aaa:-2.383299
456:-2.232342
x:-2.53739230
aaa:-2.96875038099
aaa:-2.92326261448
aaa:-2.87628054847
bbb:-2.82755928961
456:-2.77678240323
x:-2.3433210
aaa:-2.72356707049
aaa:-2.6675072938
aaa:-2.60827106148
456:-2.3323232
x:-2.8743920
aaa:-2.433233
aaa:-2.9747893
aaa:-2.9747893
bbb:-2.43873
456:-2.43434
我要匹配
x:.....
aaa:.....
aaa:.....
aaa:.....
bbb:.....
456:.....
表示如果存在bbb,那么我从x:...到456:....
示例数据的预期结果是:
x:-2.53739230
aaa:-2.96875038099
aaa:-2.92326261448
aaa:-2.87628054847
bbb:-2.82755928961
456:-2.77678240323
x:-2.8743920
aaa:-2.433233
aaa:-2.9747893
aaa:-2.9747893
bbb:-2.43873
456:-2.43434
我写:
a=re.findall(r"x:(.*\n){4}bbb:.*\n456.*",target_str)
print(a)
但是结果是:
['aaa:-2.87628054847\n', 'aaa:-2.9747893\n']
这是不正确的,有人可以帮助我吗?非常感谢。
答案 0 :(得分:1)
尝试使用以下正则表达式:
(x:(?:.*\n){4}bbb:.*\n456.*)
(?:.*\n)
-?:
使组无法捕获,因此不会设置为输出。
在整个正则表达式上加上括号使它成为您希望作为输出看到的组