如何用.NET正则仅去除Wikipedia mul模板中的重复值?
解决AutoWikiBrowser中mul模板参数去重问题
方案1:使用C#代码替换(推荐,更可靠)
这种方法直接针对{{mul|...}}模板内容进行参数拆分、去重后重新拼接,避免正则匹配的边界问题:
- 在AutoWikiBrowser的替换规则中,选择正则替换,并勾选「使用C#代码」选项
- 查找模式:
\{\{mul\|(.*?)\}\} - 替换代码:
var paramsList = match.Groups[1].Value.Split('|') .Select(p => p.Trim()) .Distinct(StringComparer.OrdinalIgnoreCase); // 如需区分大小写可去掉IgnoreCase return $"{{{{mul|{string.Join("|", paramsList)}}}}}"; - 应用规则后,会自动将
{{mul|fr|en|fr}}转换为{{mul|fr|en}},且不会影响其他模板。
方案2:纯正则替换(无需代码)
如果不想使用C#代码,可使用限定范围的正则匹配,仅移除mul模板内的重复参数:
- 选择正则替换,不勾选代码选项
- 查找模式:
(?<=\{\{mul\|(?:[^|}]+\|)*)\b(\w+)\s*\|\s*(?=(?:[^|}]+\|)*\1\b[^}]*\}\}) - 替换为:空字符串(留空即可)
- 勾选「重复替换直到没有匹配」,确保多次重复的参数被完全移除。
正则说明
(?<=\{\{mul\|(?:[^|}]+\|)*):正向回顾确保当前匹配处于{{mul|开头的模板内部\b(\w+)\s*\|\s*:匹配待移除的重复参数(含后续竖线及空格)(?=(?:[^|}]+\|)*\1\b[^}]*\}\}):正向预查确保该参数在模板结束前已出现过,避免影响模板外内容
内容的提问来源于stack exchange,提问作者oli_vi_er
相关产品推荐
相关产品推荐

