【问题标题】:Remove all regex coincidence in a string删除字符串中的所有正则表达式重合
【发布时间】:2021-10-13 10:02:59
【问题描述】:

给定这样的字符串:

[订单数据]\r\n 合同编号=7654321\r\n 订单号=00\r\n 合同订单=1234567\r\n 国家/地区=波兰\r\n Location=whatever\r\n Ship Date=YYYY/MM/DD\r\n...

我想替换每一行中等号“=”和新行“\r\n”之间的值。

[订单数据]\r\n 合同编号=\r\n 订单号=\r\n 合同订单=\r\n 国家/地区=\r\n 位置=\r\n 发货日期=\r\n...

我尝试过类似的方法。

string[] stringSeparator= new string[] { "\r\n" };
List<string> diff;

IEnumerable<string> set1 = 
    file.Split(stringSeparator, StringSplitOptions.None).Distinct();
            
var cleanLines= new List<string>();

foreach (var set in set1) {
    var index = set.IndexOf("=");
    if (index >= 0)
    {
        var input = set.Substring(0, index+1);
        list.Add(input);
    }
    else {
        list.Add(set);
    }
}

该解决方案的问题是我无法重复添加到列表中的行,因此在删除文件中的值后,结果中缺少一些重复的行。

【问题讨论】:

    标签: c# string replace


    【解决方案1】:

    您可以使用=.+匹配第一次出现的等号并匹配任何后续字符1次或多次

    在替换中使用等号。

    string str = "[Order Data]\r\n Contract Number=7654321\r\n Order Number=00\r\n Contract Order=1234567\r\n Country=Poland\r\n Location=whatever\r\n Ship Date=YYYY/MM/DD\r\n";
    string result = Regex.Replace(str, "=.+", "=");
    Console.WriteLine(result);
    

    输出

    [Order Data]
     Contract Number=
     Order Number=
     Contract Order=
     Country=
     Location=
     Ship Date=
    

    查看C# demo

    【讨论】:

      【解决方案2】:

      您也可以使用简单的 Regex.Replace

      var input = "[Order Data]\r\n Contract Number=7654321\r\n Order Number=00\r\n Contract Order=1234567\r\n Country=Poland\r\n Location=whatever\r\n Ship Date=YYYY/MM/DD\r\n";
      //Matches = followed by any character except \r. Replace with group 1 (=)
      var cleaned = Regex.Replace(input, @"(=)[^\r]+", "$1", RegexOptions.Multiline);
      

      输出

      [订单数据] 合约编号= 订单编号= 合约订单=
      国家= 地点= 发货日期=

      【讨论】:

      • 谢谢,非常感谢
      【解决方案3】:

      此代码将获取您的示例数据并将其转换为您的示例输出:

      // example data
      var input = "[Order Data]\r\n Contract Number=7654321\r\n Order Number=00\r\n Contract Order=1234567\r\n Country=Poland\r\n Location=whatever\r\n Ship Date=YYYY/MM/DD\r\n";
      
      // remove the values
      var output = new Regex(@"=[^\r]+\r").Replace(input, "=\r");
      
      // show the answer
      MessageBox.Show(output.Replace("\r", "\\r").Replace("\n", "\\n"));
      

      最后一行的替换只是为了让您可以看到 \r\n 字符。

      最终结果是:

      这将呈现为:

      [Order Data]
       Contract Number=
       Order Number=
       Contract Order=
       Country=
       Location=
       Ship Date=
      

      【讨论】:

      • 谢谢,非常感谢
      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2014-11-07
      • 1970-01-01
      相关资源
      最近更新 更多