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

如何用Python re高效提取多行字符串中Colour:后的颜色词?

解决Python多行字符串中提取Colour:后颜色词的问题

你的正则表达式'Colour:(.*?)Colour:'之所以返回空列表,是因为它试图匹配两个Colour:之间的内容,但你的字符串里每个Colour:都在单独一行的开头,没有连续的Colour:前后包裹的情况,最后一行更是没有后续的Colour:,自然匹配不到任何结果。

下面是几种用re模块实现的正确方法,其中re.findall是最简洁高效的方案:

方法1:使用re.findall(推荐,最快最简洁)

import re

str_content = """
Colour: Black
Colour: Green
Colour: Black
Colour: Red
Colour: Orange
Colour: Blue
Colour: Green
"""

colors = re.findall(r'Colour:\s*(.*)', str_content)
print(colors)
# 输出: ['Black', 'Green', 'Black', 'Red', 'Orange', 'Blue', 'Green']

正则说明:

  • Colour::匹配固定前缀文本
  • \s*:匹配冒号后面的任意空白字符(包括空格、制表符,兼容不同格式的空格数量)
  • (.*):捕获颜色内容,.默认不匹配换行符,会自动停在每行末尾,刚好获取到完整的颜色词

方法2:使用re.finditer

如果需要获取匹配对象的额外信息(比如匹配位置),可以用re.finditer,再通过列表推导式提取捕获组:

colors = [match.group(1) for match in re.finditer(r'Colour:\s*(.*)', str_content)]

这个方法和findall效率接近,但代码稍长,适合需要处理匹配细节的场景。

不推荐使用re.search的原因

re.search只会返回第一个匹配的结果,无法一次性提取所有颜色,因此不适合你的需求。

可选优化:更严谨的正则

如果确定颜色词是单个纯字母单词(无空格、符号),可以用更精准的正则避免意外捕获:

colors = re.findall(r'Colour:\s*([A-Za-z]+)', str_content)

如果颜色可能包含空格(比如Light Blue),则保留原来的(.*)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:10:18