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

Python正则表达式:含可选单词的短语拆分语法求解

嘿,看来你是想把那段长文本里的每个「X talked to Y」对话片段拆分出来对吧?我来帮你搞定正则表达式的问题,给你两种实用的方案:

方案1:用re.split按分隔符拆分

这种方法最直接,因为你的文本里每个对话单元都是用, and 来连接的,我们只需要先清理掉开头的前缀,再按这个分隔符拆分就行:

import re
from pprint import pprint

text = """Here is a list: Bob talked to Caleb, and Caleb talked to Derek, and Derek talked to Eric, and Eric talked to Fred, and Fred talked to Greg, and Greg talked to Henry, and Henry talked to Isaac, and Isaac talked to Jesse, and Jesse talked to Ken."""

# 先移除开头的"Here is a list: "前缀
cleaned_text = re.sub(r"^Here is a list: ", "", text)
# 用", and "作为分隔符拆分字符串
conversations = re.split(r", and ", cleaned_text)
# 去掉最后一个元素末尾的句号
conversations[-1] = conversations[-1].rstrip(".")

pprint(conversations)

运行后你会得到一个干净的对话列表:

['Bob talked to Caleb',
 'Caleb talked to Derek',
 'Derek talked to Eric',
 'Eric talked to Fred',
 'Fred talked to Greg',
 'Greg talked to Henry',
 'Henry talked to Isaac',
 'Isaac talked to Jesse',
 'Jesse talked to Ken']

如果你的文本里分隔符不固定(比如有时候是and或者, and 多空格),可以把拆分的正则改成更灵活的版本:

conversations = re.split(r",?\s+and\s+", cleaned_text)

这个正则能匹配「可选逗号+任意空格+and+任意空格」的分隔符,兼容性更强。

方案2:用re.findall直接匹配对话片段

如果不想处理前缀和分隔符,直接提取所有符合「名字 talked to 名字」结构的片段,可以用正则匹配:

import re
from pprint import pprint

text = """Here is a list: Bob talked to Caleb, and Caleb talked to Derek, and Derek talked to Eric, and Eric talked to Fred, and Fred talked to Greg, and Greg talked to Henry, and Henry talked to Isaac, and Isaac talked to Jesse, and Jesse talked to Ken."""

# 匹配所有"名字 talked to 名字"的完整短语
pattern = r"[A-Z][a-z]+ talked to [A-Z][a-z]+"
full_conversations = re.findall(pattern, text)

pprint(full_conversations)

如果你还想单独提取对话双方的名字,可以把正则改成带分组的版本:

name_pattern = r"([A-Z][a-z]+) talked to ([A-Z][a-z]+)"
name_pairs = re.findall(name_pattern, text)
pprint(name_pairs)

这样会得到一个包含名字元组的列表,方便后续处理:

[('Bob', 'Caleb'),
 ('Caleb', 'Derek'),
 ('Derek', 'Eric'),
 ('Eric', 'Fred'),
 ('Fred', 'Greg'),
 ('Greg', 'Henry'),
 ('Henry', 'Isaac'),
 ('Isaac', 'Jesse'),
 ('Jesse', 'Ken')]

这两种方案都能完美解决你的问题,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:18