gpt4 book ai didi

python 正则表达式 向后查找 向前查找

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

几天前我发布了一个关于如何捕获某个正则表达式匹配之前的文本中的单词的问题。 enter link description here

根据提出的解决方案,我在 regex101 中尝试尝试获取匹配项后面的单词。

这是代码:

content="""Lorem ipsum dolor sit amet (12,16) , consectetur 23 adipiscing elit. Curabitur (45) euismod scelerisque consectetur. Vivamus aliquam velit (46,48,49) at augue faucibus, id eleifend purus (34) egestas. Aliquam vitae mauris cursus, facilisis enim (23) condimentum, vestibulum enim. """

print(content)
pattern =re.compile(r"((?:\w+ ?){1,5}(?=\(\d))(\([\d]+\))(?: )(?:\w+ ?){1,5}")
matches = pattern.findall(content)
print('the matches are:')
print(matches)

正则表达式可以工作并捕获括号之间的数字。

这是正则表达式的解释

((?:\w+ ?){1,5}(?=\(\d))(\([\d]+\))(?: )(?:\w+ ?){1,5}
________________________***********++++++++++++++

____ = 这是后面的样子。在比赛前查找 1 到 5 个单词,直至找到空位 (

****= 实际的正则表达式 ===> 括号之间的数字

++++= 这是我假装用来捕获正则表达式之后的单词的部分。

我在 regex101 中尝试过,结果明显不错:

enter image description here

但是代码的结果如下:

[('Curabitur ', '(45)'), ('id eleifend purus ', '(34)'), ('facilisis enim ', '(23)')]

如您所见,该列表包含元组,其中首先包含前面的单词,然后包含匹配项本身,但不包含以下单词。

问题在哪里???

我的预期结果是:

matches=[('Curabitur ', '(45)', '**euismod scelerisque consectetur**'), ('id eleifend purus ', '(34)', '**egestas**'), ('facilisis enim ', '(23)', '**condimentum**')]

最佳答案

您的正则表达式还需要有第三个捕获组才能由 findall 返回:

>>> print re.findall(r"((?:\w+ ?){1,5}(?=\(\d))(\(\d+\))(?: )((?:\w+ ?){1,5})", content)
[('Curabitur ', '(45)', 'euismod scelerisque consectetur'), ('id eleifend purus ', '(34)', 'egestas'), ('facilisis enim ', '(23)', 'condimentum')]

注意 ((?:\w+ ?){1,5}) 作为第三个捕获组。

另请注意,[\d]+ 相当于 \d+

关于python 正则表达式 向后查找 向前查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099104/

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