gpt4 book ai didi

python - re.findall...发现太多了! :)

转载 作者:行者123 更新时间:2023-12-02 19:09:37 29 4
gpt4 key购买 nike

在 python 的 re.findall 中尝试正则表达式时,我遇到了这个问题:

line = "Lorem ipsum HELLO dolor sit amet, GOODBYE consectetuer adipiscing elit, HELLO sed diam nonummy nibh GOODBYE all"

X = re.findall("(HELLO)(.*)(GOODBYE)", line, flags=re.MULTILINE)

print (y)

这将输出:

('HELLO', ' dolor sit amet, GOODBYE consectetuer adipiscing elit, HELLO sed diam nonummy nibh ', 'GOODBYE')

但我想要的更像是......

[('HELLO', ' dolor sit amet', 'GOODBYE'), ('HELLO', 'sed diam nonummy nibh ', 'GOODBYE')]

因此,re.findall(基于我定义模式的方式)似乎不是一次只取一个,而是寻找第一次和最后一次出现的 HELLO 和 GOODBYE 来定义列表元素,并且它然后将其他所有内容放入中间组。

有没有办法按照我的要求得到它?我想也许“序列化”HELLO 和 GOODBYE 对可能会有所帮助,有点像这样:

line = "Lorem ipsum HELLO_1 dolor sit amet, GOODBYE_1 consectetuer adipiscing elit, HELLO_2 sed diam nonummy nibh GOODBYE_2 all"

但这似乎使问题变得更加困难。

非常感谢任何有用的想法!

最佳答案

您使用贪婪 .* 运算符。它匹配尽可能多的字符。将其替换为非贪婪的 .*?:

x = re.findall("(HELLO)(.*?)(GOODBYE)", line, flags=re.M)
#[('HELLO', ' dolor sit amet, ', 'GOODBYE'),
# ('HELLO', ' sed diam nonummy nibh ', 'GOODBYE')]

关于python - re.findall...发现太多了! :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64510425/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com