python正则表达式lookbehind lookahead

2024-09-28 16:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

几天前我发布了一个问题,关于如何捕捉某个正则表达式匹配之前文本中的单词。 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**')]


Tags: 代码idcontent单词printmatchesconsecteturregex101
1条回答
网友
1楼 · 发布于 2024-09-28 16:49:30

您的正则表达式还需要有第三个捕获组,以便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+。你知道吗

相关问题 更多 >