替换字符或序列列表中未包含的所有字符

时间:2016-09-19 13:27:23

标签: c# .net regex

我正在处理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?

我如何实现目标?

1 个答案:

答案 0 :(得分:3)

WiktorStribiż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);

DEMO

为输入A?B?@@?C?A返回AXBY@@CZ@A

请记住Dmitry Bychenko的暗示。这个样本没有回答他的问题。