我一直在努力理解正则表达式,有没有办法可以替换两个正则表达式之间的字符/例如我有
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;Ø";
答案 0 :(得分:1)
我认为你需要更好地理解正则表达式以及替换函数的工作原理。使用正则表达式,您将定义捕获组,并使用替换功能来替换这些组。
如何删除正则表达式之间的字符串“;”和“Ø”???
步骤1:首先找到“;”,然后捕获所有字符,包括“Ø”。
那是(;.*?Ø)
步骤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;
}
}
}