如何用C#正则表达式替换转录文本中的重复词(含逗号分隔)
解决语音转文字转录文本的重复内容问题
1. 单个重复单词的处理
针对带逗号或空格分隔的重复单词(如"I, I, I"、"I I"),可以用正则结合循环替换解决多次重复的问题:
正则表达式
var wordRegex = new Regex(@"\b(\w+)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase);
\b(\w+):匹配单个单词并捕获为分组1(?:,\s*)?:匹配可选的逗号加任意空格(非捕获分组,不影响替换结果)\s+\1\b:匹配一个或多个空格后重复的分组1单词,确保单词边界避免部分匹配
C# 实现代码
string input = "I, I, I am really wanting to go, but I I am not, am not able to do it."; string result = input; var wordRegex = new Regex(@"\b(\w+)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase); // 循环替换直到无匹配项,处理三次及以上重复的情况 while (wordRegex.IsMatch(result)) { result = wordRegex.Replace(result, "$1"); }
处理后结果:I am really wanting to go, but I am not able to do it.
2. 重复短语的处理
针对"you know, you know you know"这类短语重复,优先推荐针对特定短语处理(避免通用正则误匹配):
特定短语处理示例
string inputPhrase = "you know, you know you know what I mean"; string resultPhrase = inputPhrase; var phraseRegex = new Regex(@"\b(you know)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase); while (phraseRegex.IsMatch(resultPhrase)) { resultPhrase = phraseRegex.Replace(resultPhrase, "$1"); }
处理后结果:you know what I mean
通用短语匹配(谨慎使用)
如果需要处理任意短语重复,可使用以下正则(可能匹配语义重复的非冗余内容,需测试调整):
var generalPhraseRegex = new Regex(@"\b([\w\s]+?)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase);
3. 组合处理流程
可以先处理单词重复,再处理短语重复,覆盖更多场景:
string originalText = "I, I, I am really wanting to go, but I I am not, am not able to do it. you know, you know you know"; string processedText = originalText; // 处理单词重复 var wordRegex = new Regex(@"\b(\w+)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase); while (wordRegex.IsMatch(processedText)) { processedText = wordRegex.Replace(processedText, "$1"); } // 处理特定短语重复 var phraseRegex = new Regex(@"\b(you know)(?:,\s*)?\s+\1\b", RegexOptions.IgnoreCase); while (phraseRegex.IsMatch(processedText)) { processedText = phraseRegex.Replace(processedText, "$1"); }
最终结果:I am really wanting to go, but I am not able to do it. you know
内容的提问来源于stack exchange,提问作者Andrew Harbert
相关产品推荐
相关产品推荐

