删除字符串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以及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;
}
}
}