如何用Regex删除指定Speaker 1:重复行并保留特定条目?
解决方案:用正则删除指定位置的重复Speaker条目
问题还原
原始文本:
Speaker 1: Lorem ipsum Speaker 1: This is text Speaker 1: Another one Speaker 2: Yadda Yadda Speaker 1: Text Speaker 2: New text
需求:删除Speaker 2:之前的第2、3个Speaker 1:条目(含对应内容),保留第一个和后续的Speaker 1:。
可行正则方案
匹配规则
使用捕获分组保留需要留存的内容,匹配并替换掉冗余部分:
(Speaker 1:\r?\n.*?)(?:\r?\nSpeaker 1:\r?\n.*?)*(\r?\nSpeaker 2:)
替换规则
将匹配到的内容替换为:
$1$2
规则解释
(Speaker 1:\r?\n.*?):捕获第一个Speaker 1:的标题和对应内容,.*?是非贪婪匹配,确保只匹配到该条目结束的位置,不会覆盖后续内容(?:\r?\nSpeaker 1:\r?\n.*?)*:非捕获分组,匹配所有位于第一个Speaker 1:和Speaker 2:之间的重复Speaker 1:条目(包括换行符、标题、内容),*表示匹配任意次数(这里刚好匹配第2、3个)(\r?\nSpeaker 2:):捕获Speaker 2:的开头部分,确保后续内容完整保留
替换后结果
Speaker 1: Lorem ipsum Speaker 2: Yadda Yadda Speaker 1: Text Speaker 2: New text
注意事项
- 上述写法兼容大多数正则工具(如VS Code、Notepad++),无需额外开启特殊模式
\r?\n用于适配Windows(\r\n)和Unix(\n)的不同换行格式
内容的提问来源于stack exchange,提问作者Turm
相关产品推荐
相关产品推荐

