替换除pattern之外的字符串中的所有字母数字字符

Mat*_*att 5 c# regex

我试图混淆一个字符串,但需要保留一些模式.基本上,所有字母数字字符都需要替换为单个字符(例如"X"),但需要保留以下(示例)模式(请注意,每个模式在开头都有一个空格)

  • QQQ"
  • 存款准备金率"

我已经看了一些关于负向前瞻/后方的样本,但仍然没有任何运气(仅测试QQQ).

var test = @"""SOME TEXT       AB123 12XYZ QQQ""""empty""""empty""1A2BCDEF";
var regex = new Regex(@"((?!QQQ)(?<!\sQ{1,3}))[0-9a-zA-Z]");            
var result = regex.Replace(test, "X");  
Run Code Online (Sandbox Code Playgroud)

正确的结果应该是:

"XXXX XXXX       XXXXX XXXXX QQQ""XXXXX""XXXXX"XXXXXXXX
Run Code Online (Sandbox Code Playgroud)

这适用于完全匹配,但会返回"QQR"之类的失败

"XXXX XXXX       XXXXX XXXXX XQR""XXXXX""XXXXX"XXXXXXXX
Run Code Online (Sandbox Code Playgroud)

Cas*_*yte 4

你可以使用这个:

var regex = new Regex(@"((?> QQQ|[^A-Za-z0-9]+)*)[A-Za-z0-9]");            
var result = regex.Replace(test, "$1X");
Run Code Online (Sandbox Code Playgroud)

这个想法是匹配所有必须首先保留的内容并将其放入捕获组中。

由于目标字符前面始终有零个或多个必须保留的内容,因此您只需在之前编写此捕获组即可[A-Za-z0-9]