如何用正则表达式替换((PERS)los)后首个句号前的ellos字符串
解决方案
要实现需求,我们需要先定位包含((PERS)los ...)的段落(到第一个句号为止),再在该段落内将所有ellos替换为对应的((PERS)los后的内容。可以通过re.sub的回调函数实现这种动态替换逻辑:
import re input_text = "Creo que ((PERS)los viejos gabinetes) estan en desuso, hay que hacer algo con ellos. ellos quedaron en el deposito de afuera, lloviznó temprano por lo que ((PERS)los viejos gabinetes) fueron llevados a la sala principal." def replace_ellos(match): # 提取整个匹配的片段(从((PERS)...到第一个句号) full_segment = match.group(0) # 提取((PERS)los 后面的目标替换文本 replacement_text = match.group(1) # 在当前片段内替换所有ellos为目标文本 return full_segment.replace("ellos", replacement_text) # 正则匹配:捕获((PERS)los后的内容,以及后续到第一个句号的所有字符 pattern = r"\(\(PERS\)los\s+([\w\s]+)\).*?\." output = re.sub(pattern, replace_ellos, input_text, flags=re.DOTALL) print(output)
代码说明
- 正则模式:
r"\(\(PERS\)los\s+([\w\s]+)\).*?\."\(\(PERS\)los\s+:精确匹配((PERS)los序列([\w\s]+):捕获los之后、)之前的文本(即用来替换ellos的内容).*?\.:非贪婪匹配到第一个英文句号,确保只处理当前((PERS)...)对应的段落范围re.DOTALL:让.匹配换行符(兼容带换行的文本)
- 回调函数
replace_ellos:- 接收每个匹配结果,提取目标替换文本
- 在当前匹配的段落内替换所有
ellos - 返回处理后的段落完成替换
执行代码后输出结果与预期一致:
Creo que ((PERS)los viejos gabinetes) estan en desuso, hay que hacer algo con los viejos gabinetes. ellos quedaron en el deposito de afuera, lloviznó temprano por lo que ((PERS)los viejos gabinetes) fueron llevados a la sala principal.
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

