我试着在文本中匹配和替换所有特定名称的匹配(几句话),但问题是这个名称可以是另一个名称的一部分。我需要替换一个名字‘项目1',但我可以在句子中也有第11项或我的第1项或第1项测试,这些都是已知的名字,不应该被触及。已知的不可触摸名称的列表是动态构建的。
从技术上讲,我想表达“匹配所有的第1项,但如果它不是第11项的一部分,我的第1项,第1项,测试”
例句:由于第1项的推广,只剩下第11项。我想把第1项改为“某物”预期输出:只有第11项是由于对某物的推广而留下的。可以用RegEx实现吗?
发布于 2020-02-10 08:55:04
使用PCRE,您可以依赖跳过失败技术:
(?:Untouchable1|Untouchable2|Untouchable3|other words to keep)(*SKIP)(*F)|other|words|to|match-and-replace由于您使用的是.NET,即C#,并且有访问代码,所以您可以使用一种模式,捕获需要替换的单词并只匹配需要保留的单词,然后使用匹配评估器检查组1的值:如果第1组匹配成功,则替换,否则保留匹配。
var pattern = @"Untouchable1|Untouchable2|Untouchable3|other words to keep|(other|words|to|match-and-replace)";
var result = Regex.Replace(testString, pattern, m =>
m.Groups[1].Success ? replaceWith : m.Value);发布于 2020-02-06 20:34:31
https://stackoverflow.com/questions/60101454
复制相似问题