删除字符串regex中分隔符之间的文本

本文关键字:之间 文本 分隔符 字符串 regex 删除 | 更新日期: 2023-09-27 18:22:07

我一直在努力理解正则表达式,有什么方法可以替换两个正则表达式之间的字符吗?例如,我有

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

如何删除regex";"answers"PXS"之间的字符串???

我试着使用这样的代码:

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

但不起作用。请纠正并给我解决方案。。。谢谢

我想要这样的结果,先生:

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

删除字符串regex中分隔符之间的文本

我认为您需要更好地理解regex以及replace函数是如何工作的。使用regex可以定义捕获组,使用replace函数可以替换这些组。

如何删除regex";"answers"PXS"之间的字符串???

步骤1:首先找到";",然后捕获所有字符(包括")。

那是(;.*?Ø)

  • (新建捕获组
  • ;匹配";"
  • 。匹配任何内容
  • *零次或多次
  • ?懒惰
  • "匹配"
  • )结束捕获

步骤2:将每组替换为";B.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;
            }
        }
    }