正则表达式多次替换

问题描述 投票:0回答:4

我正在尝试使用字符串中的正则表达式执行多次替换。目前,我在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上我做错了什么吗?

c# .net regex
4个回答
2
投票

为什么Linq比正则表达式更简单:

string source = "5441.32 6140";

string result = string.Concat(source
  .Select(c => c >= '0' && c <= '2' 
     ? (char) (c - '0' + 'A')
     : c));

如果你想更新条件并添加,比如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

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;
});

0
投票

你可以简单地做字符串替换 -

string input = "5441.32 6140";
string output = input.Replace('0', 'A').Replace('1', 'B').Replace('2', 'C');
Console.WriteLine(output); //output is 544B.3C 6B4A

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#

© www.soinside.com 2019 - 2024. All rights reserved.