gpt4 book ai didi

python - 使用 Python 的正则表达式 : findall inside a boundry

转载 作者:行者123 更新时间:2023-11-30 22:28:52 25 4
gpt4 key购买 nike

我有一个字符串,可以通过以下方式进行说明(有意使用额外空格):

"words that don't matter   START    some words one       some words two     some words three   END    words that don't matter"

为了获取 START 和 END 之间的每个子字符串['some Words one', some Words Two', 'some Words Three'],我编写了以下代码:

result = re.search(r'(?<=START).*?(?=END)', string, flags=re.S).group()
result = re.findall(r'(\(?\w+(?:\s\w+)*\)?)', result)

是否可以通过一个正则表达式来实现这一目标?

最佳答案

理论上,您可以将第二个正则表达式包装在 ()* 中,然后将其放入第一个正则表达式中。这将捕获你内心表达的所有发生的范围。不幸的是,Python 实现仅保留多次匹配的组中的最后一个匹配项。据我所知,保留一组所有匹配的唯一实现是 .NET 实现。不幸的是,这不是您的解决方案。

另一方面,为什么你不能简单地保留现有的两步方法?

<小时/>

编辑:您可以使用在线正则表达式工具比较我描述的行为。

模式:(\w+\s*)* 输入:aaa bbb ccc

例如尝试使用 https://pythex.org/http://regexstorm.net/tester 。您将看到 Python 返回一个匹配/组,即 ccc,而 .NET 返回 $1 作为三个捕获 aaa、bbb、ccc .

<小时/>

Edit2:正如 @Jan 所说,还有支持多重捕获的较新的 regex 模块。我完全忘记了这一点。

关于python - 使用 Python 的正则表达式 : findall inside a boundry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507771/

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