gpt4 book ai didi

python - 为什么正则表达式不捕获初始单词? Python

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:58 25 4
gpt4 key购买 nike

为什么我的正则表达式模式没有捕捉到介词前的单词?

我的正则表达式模式试图捕获后面有介词的专有名词。例如:• 管理学院 --> 学院• McGraw Hill 图书基金会 --> Foundation of

对于以下文本:

'The Academy of Management Entrepreneurship Division and McGraw Hill present the annual award to individuals who develop and implement an innovation in entrepreneurship pedagogy for either graduate or undergraduate education.'

pp = r'[A-Z][A-Za-z]+\s+\b(for|of|in|by)\b(?=\s+[A-Z][A-Za-z]+)'

x2 = re.findall(pp,test)

x2

输出:

'的'

为什么不输出'Academy of'?

最佳答案

捕获组是括在括号 ( ) 中的正则表达式的一部分。它们用于从匹配表达式中提取特定部分。看起来您是偶然遇到它们的,因为您正在使用它们来匹配“for”、“of”、“in”或“by”。

当你的表达式中有一个捕获组时(如你的问题),re.findall 将返回该组的匹配列表。目前,您的正则表达式的第一部分周围没有任何组。如果你也想捕获它,你还必须将它括在一些括号中:

pp=r'([A-Z][A-Za-z]+\s+\b(for|of|in|by))\b(?=\s+[A-Z][A-Za-z]+)'
# ^ ^
re.findall(pp,test)

返回:

[('Academy of', 'of')]

现在 re.findall 返回了一个元组列表,因为现在有多个捕获组。元组的元素按组开始的顺序出现。

如果你不想也匹配其他组,你可以将其更改为非捕获:

(?:for|of|in|by)

那么唯一会被捕获的是['Academy of']。虽然现在您只剩下一个捕获组,因此您可以完全省去括号,re.findall 将返回与完整正则表达式匹配的所有内容。

pp=r'[A-Z][A-Za-z]+\s+\b(?:for|of|in|by)\b(?=\s+[A-Z][A-Za-z]+)'

关于python - 为什么正则表达式不捕获初始单词? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127537/

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