gpt4 book ai didi

当设置两个条件部分满足彼此而没有 IF 语句或测试组且不作为元组时,Python 正则表达式返回两个结果

转载 作者:行者123 更新时间:2023-12-01 02:57:05 25 4
gpt4 key购买 nike

在接下来的几天里我将有很多关于正则表达式的问题。在过去 5 天里我给自己提出的 10 个挑战中,我成功解决了 6 个。

我希望下面的内容并不简单和令人尴尬,但我正在尝试使用 re.findall 返回这两个条件的结果,即使第 2 组的条件可能已被第 1 组部分满足.

示例(问题):

>>> str = 'ab1cd2efg1hij2k'
>>> re.findall('ab1cd|ab', str)
['ab1cd']
>>> re.findall('ab|ab1cd', str)
['ab']

因此请注意,根据 OR 语句中先出现的那个来确定数组的单个元素是什么。我想要的是能够返回 2 元素数组,最好不是元组。我对正则表达式 ANDing 所做的阅读重点是使正则表达式匹配 2 个不同的字符串,而不是返回可能部分相互满足的多个结果。以下是我想要的。

期望的输出:

>>> str = 'ab1cd2efg1hij2k'
>>> re.findall('{SOMETHING_THAT_RETURNS_BOTH}', str)
['ab', 'ab1cd']

我得到的最接近的是:

>>> re.findall('ab|[\S]+?(?=2e)', str)
['ab', '1cd']
>>> re.findall('ab|[\S]+(?=2e)', str)
['ab', '1cd']

但第二个捕获组忽略 ab。正则表达式中是否有指令表示从头开始重新启动? (?:^) 似乎与 ^ 的工作方式相同,并且以多种方式使用它到目前为止没有帮助。请注意,我不想使用正则表达式 IF 语句,也不想测试前一组是否匹配,因为在为我还不知道的事情打下更坚实的基础之前,我还没有准备好学习这些方法。

非常感谢。

最佳答案

如果您可以放宽元组要求,那么由于您需要捕获重叠文本,因此需要使用具有 2 个独立前瞻的正则表达式:

>>> print re.search(r'(?=(ab1cd))(?=(ab))', str).groups()
('ab1cd', 'ab')

两个前瞻都有一个捕获组,从而为我们提供所需的输出。

您还可以使用findall:

>>> print re.findall(r'(?=(ab1cd))(?=(ab))', str)[0]
('ab1cd', 'ab')

关于当设置两个条件部分满足彼此而没有 IF 语句或测试组且不作为元组时,Python 正则表达式返回两个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116258/

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