python - 匹配字符串时捕获前n个词

标签 python regex

假设我有这段文字:

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]:匹配从大写字母 AZ
      • 的单个字母表
      • \w+:匹配任意单词字符一次或多次
      • \s? :匹配任何空白字符零次或一次
  • \s :匹配单个空白字符
  • \(:匹配字符(字面上的
  • P :按字面意思匹配字符 P
  • [A-Z] :匹配从大写字母 AZ
  • 的单个字母表

在线查看regex demo

关于python - 匹配字符串时捕获前n个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67378736/

相关文章:

python - 安装numpy - 系统找不到指定的文件(msvcr90.dll)

python - 正则表达式:匹配同一未知子串的两次出现

javascript - 正则表达式,用于删除括号两侧的空格

regex - guid 的 vim 模式是什么

javascript - Javascript中三元运算符的解释

python - 在 Qt Creator 中将 QML 组件相互公开

python - 使用 scipy.stats 拟合非标准化分布

python - 这个字典理解与这个 "for"循环有什么不同?

python - 为什么我的函数抛出 'StopIteration' 异常?

regex - HTML5 模式匹配和 MinLength 文本框问题 -