为什么我的regex模式没有抓住介词前的单词?
我的regex模式是试图捕捉在它们后面有介词的专有名词。例如:·管理学院
关于下列案文:
“管理学院创业部和McGraw Hill颁发年度奖给那些为研究生或本科教育开发和实施创业教育学创新的个人。”
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
产出:
“‘of”
为什么它不输出“学院”?
发布于 2014-08-04 21:12:17
捕获组是括在括号( )中的正则表达式的一部分。它们用于从匹配表达式中提取特定部分。看起来你是偶然遇到他们的,因为你用一个来匹配"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]+)'发布于 2014-08-04 21:10:34
只需在介词前面加上一个捕获组:
pp = r'([A-Z][A-Za-z]+)\s+\b(for|of|in|by)\b(?=\s+[A-Z][A-Za-z]+)'
或者,如果您想捕获整个单词/介词字符串:
pp = r'([A-Z][A-Za-z]+\s+\b(?:for|of|in|by))\b(?=\s+[A-Z][A-Za-z]+)'
https://stackoverflow.com/questions/25127537
复制相似问题