删除字符串中的分隔符之间的文本 - 正则表达式

时间:2014-09-17 10:23:38

标签: c#

我一直在努力理解正则表达式,有没有办法可以替换两个正则表达式之间的字符/例如我有

string datax = "a4726e1e-babb-4898-a5d5-e29d2bc40028;POPULATE DATA AØ99c1d133-15f5-4ef5-bc59-  d9ed673b70c6;POPULATE DATA BØ";

如何删除正则表达式之间的字符串“;”和“Ø”???

我尝试使用这样的代码:

string xresult = Regex.Replace(datax, @"(?<=;)(\w+?)(?=Ø)", "");

但不行。 请更正并给我解决方案...... 感谢...

我希望结果像这样先生:

string datax = "a4726e1e-babb-4898-a5d5-e29d2bc40028;Ø99c1d133-15f5-4ef5-bc59-d9ed673b70c6;Ø";

1 个答案:

答案 0 :(得分:1)

我认为你需要更好地理解正则表达式以及替换函数的工作原理。使用正则表达式,您将定义捕获组,并使用替换功能来替换这些组。

  

如何删除正则表达式之间的字符串“;”和“Ø”???

步骤1:首先找到“;”,然后捕获所有字符,包括“Ø”。

那是(;.*?Ø)

  • (New Capture Group
  • ;匹配“;”
  • 。匹配任何东西
  • *零次或多次
  • ?懒惰
  • Ø匹配“Ø”
  • )结束捕获

步骤2:用“;Ø”

替换每个组
  

public static string Replace(字符串输入,字符串模式,字符串   更换)

所以你需要放回从原始捕获中移除的“;Ø”。

    static void Test2()
    {

        foreach (string item in SO2588078())
        {
            Console.WriteLine(item);
        }

        string input = "a4726e1e-babb-4898-a5d5-e29d2bc40028;POPULATE DATA AØ99c1d133-15f5-4ef5-bc59-  d9ed673b70c6;POPULATE DATA BØ";
        string regex = "(;.*?Ø)";
        string output = Regex.Replace(input, regex, ";Ø");

        if (output == string.Join(";Ø", SO2588078()) + ";Ø")
        {
            Console.WriteLine("TRUE");
        }
    }

另一种方法是在没有正则表达式的情况下解析字符串。这是一种简单的格式,这使您可以更好地控制过程,这样您就可以看到发生了什么,出错的原因以及为什么会给出结果。因为你可以逐步完成它。

    private static IEnumerable<string> SO2588078()
    {
        string datax = "a4726e1e-babb-4898-a5d5-e29d2bc40028;POPULATE DATA AØ99c1d133-15f5-4ef5-bc59-  d9ed673b70c6;POPULATE DATA BØ";
        string temp = datax;
        while (!string.IsNullOrEmpty(temp))
        {
            int index1 = temp.IndexOf(';');
            if (index1 > -1)
            {
                string guid = temp.Remove(index1);
                yield return guid;
                int index2 = temp.IndexOf('Ø');
                if (index2 > -1)
                {
                    temp = temp.Substring(index2 + 1);
                }
                else
                {
                    temp = null;
                }
            }
            else
            {
                temp = null;
            }
        }
    }