假设我有这段文字:
abcdefg Mark Jones (PP) etc etc
akslaskAS Taylor Daniel Lautner (PMB) blabla
etcetc Allan Stewart Konigsberg Farrow (PRTW)
我想捕获这些个人姓名:
Mark Jones, Taylor Daniel Lautner, Allan Stewart Konigsberg Farrow.
基本上,当我们找到 (P 后跟任何大写字母时,我们会捕获前面的 n 个以大写字母开头的单词。
到目前为止,我所取得的成就是使用以下代码仅捕获前一个词:\w+(?=\s+(\(P+[A-Z]))
。但我无法进化从那个。
如果有人可以提供帮助,我将不胜感激:)
最佳答案
正则表达式模式
\b((?:[A-Z]\w+\s?)+)\s\(P[A-Z]
为了找到上述正则表达式模式的所有匹配项,我们可以使用 re.findall
import re
text = """abcdefg Mark Jones (PP) etc etc
akslaskAS Taylor Daniel Lautner (PMB) blabla
etcetc Allan Stewart Konigsberg Farrow (PRTW)
"""
matches = re.findall(r'\b((?:[A-Z]\w+\s?)+)\s\(P[A-Z]', text)
>>> matches
['Mark Jones', 'Taylor Daniel Lautner', 'Allan Stewart Konigsberg Farrow']
正则表达式详细信息
\b
: 单词边界以防止部分匹配((?:[A-Z]\w+\s?)+)
:第一个捕获组(?:[A-Z]\w+\s?)+
:非捕获组匹配一次或多次[A-Z]
:匹配从大写字母A
到Z
的单个字母表
\w+
:匹配任意单词字符一次或多次\s?
:匹配任何空白字符零次或一次
\s
:匹配单个空白字符\(
:匹配字符(
字面上的P
:按字面意思匹配字符P
[A-Z]
:匹配从大写字母A
到Z
的单个字母表
在线查看regex demo
关于python - 匹配字符串时捕获前n个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67378736/