C# 替换字符或序列列表中未包含的所有字符
我正在编写C#代码,该代码应该将所有未知(unknown=其他可用)字符替换为我选择的一个字符(例如?)。可用字符可以是单个字符、或两个或多个字符的序列 例如:C# 替换字符或序列列表中未包含的所有字符,c#,.net,regex,C#,.net,Regex,我正在编写C#代码,该代码应该将所有未知(unknown=其他可用)字符替换为我选择的一个字符(例如?)。可用字符可以是单个字符、或两个或多个字符的序列 例如: Input string: AXBY@@CZ Available characters or sequences: A, B, C, @@ Desired output: A?B?@@C? Input string: AXBY@CZ Available characters or sequences: A, B, C, @@ Desi
Input string: AXBY@@CZ
Available characters or sequences: A, B, C, @@
Desired output: A?B?@@C?
Input string: AXBY@CZ
Available characters or sequences: A, B, C, @@
Desired output: A?B??C?
其他例子:
Input string: AXBY@@CZ
Available characters or sequences: A, B, C, @@
Desired output: A?B?@@C?
Input string: AXBY@CZ
Available characters or sequences: A, B, C, @@
Desired output: A?B??C?
我想使用正则表达式来实现这一点。最接近解决方案的是这样的正则表达式:
(?!@@|[ABC]).
但在这样的输入字符串示例中,它将导致错误的结果:
Input string: AXBY@@CZ
Result from above regex: A?B?@?C?
Instead of wanted by me: A?B?@@C?
如何实现我的目标?一个关于Wiktor Stribiżew的例子:
var str = "AXBY@@CZ@A";
var matches = Regex.Matches(str, "@@|[ABC]").Cast<Match>();
var replaced = string.Join("?", matches.Select(x => x.Value));
Console.WriteLine(replaced);
var str=“AXBY@@CZ@A";
var matches=Regex.matches(str,“@|[ABC]”).Cast();
var replaced=string.Join(“?”,matches.Select(x=>x.Value));
控制台写入线(已更换);
对于输入AXBY,返回A?B?@?C?A
@@CZ@A
记住Dmitry Bychenko的暗示。此示例没有回答他的问题。匹配它们并加入匹配值。您可以为我的示例案例发布正则表达式吗?问题是,您在否定的前瞻性断言中只使用一个字符。第一个@匹配,但第二个将被删除。您可以使用这个正则表达式来实现这一点:但是使用Wiktor Stribiżew的提示要简单得多。当已知
A
,XY
,YB
时,AXYB
的expcred输出是什么?它应该是AXY吗?还是A?YB??是的,我会这样做。这可以根据需要进一步增强。