【问题标题】:Python RgEx: Extract First Consecutive Capitalized LettersPython RegEx:提取第一个连续的大写字母
【发布时间】:2026-01-05 19:40:02
【问题描述】:

我有一些新闻标题,我想提取标题中涉及的公司名称。这是一个例子

headlines = [
    "Chicago Policemen's Annuity & Benefit Fund hired Chicago Equity Partners to manage $50 million in active U.S. smidcap value equity.",
    "Belmont Contributory Retirement System is searching for at least one U.S. small-cap equity manager to run initially up to $5 million.",
    "Phoenix Employees' Deferred Compensation Board will begin a search for an investment consultant before the end of February."    
]

如您所见,此处的模式是感兴趣的公司名称是首个大写单词链。第二个大写单词链是二级公司。

在我们的示例中,我想返回两个与提取连续大写字母相关的变量。因此,它将返回“芝加哥警察年金和福利基金”、“贝尔蒙特缴费退休制度”和“凤凰城员工延期补偿委员会”

有没有办法在 Python 中使用正则表达式进行这种提取?

【问题讨论】:

  • 第一个例子不应该停在Chicago Policemen's Annuity吗? “&”不是大写字母。
  • 你试过什么?请发布您的代码并描述它当前产生的内容与您希望它产生的内容。此外,与号 & 不是大写字母,因此不符合您所描述的意图。
  • & 是一个字母吗?我认为它是非词绒毛分隔词。
  • 为什么每个人都对这个 & 符号如此感兴趣? OP的意图很明确,不是吗?

标签: python regex nltk


【解决方案1】:

对于您给定的示例,可能是匹配连续大写单词的选项,直到遇到空格和小写字符或字符串结尾。

^(?:[A-Z][^A-Z]+?)+(?= [a-z]|$)

说明

  • 从字符串^开始
  • 非捕获组(?:
    • 匹配一个大写字符[A-Z]
    • 匹配非大写字符一次或多次非贪婪[A-Z]+?
  • 关闭捕获组)+并重复一次或多次
  • 积极的前瞻(?= 断言接下来是
    • 一个空格后跟一个小写字符[a-z]
    • |
    • 字符串结尾$
  • 关闭正向前瞻)

在这种情况下,匹配会停止,直到遇到空格和小写字符,但您可以将字符类扩展为 [a-z&] 以在遇到空格和 & 符号时停止匹配。

【讨论】:

    【解决方案2】:

    只是为了让你朝着正确的方向前进,

    第 1 步:分割你的字符串(你的分隔符是一个空格)

    第2步:检查位置0的字符是否大写

    第 3 步:将子字符串添加/附加到 your company name

    第 4 步:重复第 2 步和第 3 步,直到第 2 步失败,然后您就有了公司名称。

    更多关于切片的帮助: https://www.pythoncentral.io/cutting-and-slicing-strings-in-python/

    【讨论】:

      【解决方案3】:

      这个正则表达式会找到标题样式的表达式:

      ((?:[A-Z][a-z\']+ ?)| & ){2,}(?= \b)
      

      你可以看到完整的测试here

      【讨论】:

        最近更新 更多