我尝试使用字符串中的正则表达式执行多次替换。目前,我在Notepad ++中使用了正则表达式命令(如下所述),它按预期工作;但是,当我试图在regexstorm上测试相同的正则表达式时,它没有用。
假设我想找到&替换以下内容:
0
> A
1
> B
2
> C
输入:
5441.32 6140
1:34,360
查找: (0)|(1)|(2)
替换: (?1A)(?2B)(?3C)
NP ++输出:
544B.3C 6B4A
B:34,36A
regexstorm输出:
544(?1A)(?2B)(?3C).3(?1A)(?2B)(?3C) 6(?1A)(?2B)(?3C)4(?1A)(?2B)(?3C)
(?1A)(?2B)(?3C):34,36(?1A)(?2B)(?3C)
我还在阅读和学习正则表达式,所以有人可以告诉我在regexstorm上我做错了什么吗?
答案 0 :(得分:2)
为什么不 Linq 比正则表达式更简单:
3 > D
如果您想更新条件并添加,例如c <= 2
,您只需将c <= 3
更改为string source = "5441.32 6140";
string result = Regex.Replace(source,
"[0-2]", // easy pattern
m => ((char)(m.Value[0] - '0' + 'A')).ToString()); // elaborated match
即可。如果你坚持正则表达,我建议使用匹配,而不是模式:
<\?xml[\s\S]*?<\/NotificationMessage>
答案 1 :(得分:0)
var s = "5441.32 6140";
var pattern = @"(0|1|2)";
var s2 = Regex.Replace(s, pattern, m =>
{
string sMatch = m.Value;
string final = null;
if (sMatch == "0")
final = "A";
else if (sMatch == "1")
final = "B";
else if (sMatch == "2")
final = "C";
return final;
});
答案 2 :(得分:0)
你可以简单地进行字符串替换 -
string source = "5441.32 6140";
string result = string.Concat(source
.Select(c => c >= '0' && c <= '2'
? (char) (c - '0' + 'A')
: c));
答案 3 :(得分:0)
您可以按照以下方式执行此操作,
static void Main(string[] args)
{
string pattern = @"(0|1|2)";
string input = "5441.32 6140";
Regex rgx = new Regex(pattern);
var map = new Dictionary<string, string> {
{ "0", "A"},
{ "1", "B"},
{ "2", "C" }
};
string result = rgx.Replace(input,m => map[m.Value]);
Console.WriteLine("Original String: '{0}'", input);
Console.WriteLine("Replacement String: '{0}'", result);
Console.ReadLine();
}
最好使用 StringBuilder 。链接:Replace Multiple String Elements in C#