You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何提取字符串中连续的标题格式单词序列

提取连续首字母大写单词序列的解决方案

看起来你之前的代码只能识别两个连续的标题格式单词,要扩展到识别任意长度的连续序列,其实可以通过分组遍历或者正则表达式来实现,下面给你两种实用的方法:

方法一:手动遍历分组(直观易调试)

这种方法通过逐个遍历单词,把连续符合条件的单词归为一组,当遇到不符合的单词时,检查当前组的长度,符合要求就保存下来。代码如下:

def get_composite_names(s):
    words = s.split()
    composite_names = []
    current_group = []
    
    for word in words:
        # 用istitle()判断是否是标题格式(首字母大写,其余小写)
        if word.istitle():
            current_group.append(word)
        else:
            # 只有当组内单词数≥2时才加入结果
            if len(current_group) >= 2:
                composite_names.append(' '.join(current_group))
            current_group = []
    # 别忘了处理循环结束后剩下的最后一组
    if len(current_group) >= 2:
        composite_names.append(' '.join(current_group))
    
    return composite_names

测试一下:

test_str = 'John Walker Smith is currently in New York'
print(get_composite_names(test_str))
# 输出: ['John Walker Smith', 'New York']

如果你的场景中,单词可能存在非首字母的大写(比如"McDonald"或者"IBM"这种),可以把判断条件改成word[0].isupper(),这样只要首字母大写就会被纳入分组。

方法二:正则表达式(简洁高效)

正则表达式可以直接匹配连续的符合条件的单词序列,代码更简洁:

import re

def get_composite_names(s):
    # 正则模式:匹配至少两个连续的首字母大写、其余小写的单词
    pattern = r'\b([A-Z][a-z]+(?:\s[A-Z][a-z]+)+)\b'
    return re.findall(pattern, s)

模式解释:

  • \b:匹配单词边界,避免匹配单词的一部分
  • [A-Z][a-z]+:匹配首字母大写、后面跟小写字母的单词
  • (?:\s[A-Z][a-z]+)+:非捕获组,匹配"空格+符合条件的单词",至少重复一次(保证整个序列至少有两个单词)

同样测试上面的示例字符串,得到的结果和方法一完全一致。如果需要兼容非首字母大写的情况,把正则模式改成r'\b([A-Z][^\s]*(?:\s[A-Z][^\s]*)+)\b'即可。

内容的提问来源于stack exchange,提问作者jax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:40