使用regex删除不在'<#';某事'#>';并将其替换为逗号

本文关键字:gt 替换 某事 删除 regex 使用 lt# #39# | 更新日期: 2023-09-27 18:19:32

我有一个字符串,例如

<#String1#> + <#String2#> , <#String3#> --<#String4#>

我想使用regex/string操作来获得以下结果:

<#String1#>,<#String2#>,<#String3#>,<#String4#>

我真的没有做这件事的经验,有什么建议吗?

使用regex删除不在'<#';某事'#>';并将其替换为逗号

有多种方法可以做到这一点,具体取决于您需要什么。然而,如果你想使用一个regex操作来完成它,并且你只想修复括号中字符串之间的内容,那么你可以这样做:

string input = "<#String1#> + <#String2#> , <#String3#> --<#String4#>";
string pattern = "(?<=>)[^<>]+(?=<)";
string replacement = ",";
string result = Regex.Replace(input, pattern, replacement);

该模式使用[^<>]+来匹配任何非尖括号字符,但它将其与一个look-behind语句((?<=>))和一个look-ahead语句(?=<)相结合,以确保它只匹配出现在括号的一个结束集和另一个开始集之间的文本。

如果您需要删除第一个<之前或最后一个>之后的文本,或者如果您发现环视语句令人困惑,您可能需要考虑简单地匹配括号之间的文本,然后循环所有匹配项并自己构建一个新字符串,而不是使用RegEx.Replace方法。例如:

string input = "sdfg<#String1#> + <#String2#> , <#String3#> --<#String4#>ag";
string pattern = @"<[^<>]+>";
List<String> values = new List<string>();
foreach (Match m in Regex.Matches(input, pattern))
    values.Add(m.Value);
string result = String.Join(",", values);

或者,使用LINQ也是一样的:

string input = "sdfg<#String1#> + <#String2#> , <#String3#> --<#String4#>ag";
string pattern = @"<[^<>]+>";
string result = String.Join(",", Regex.Matches(input, pattern).Cast<Match>().Select(x => x.Value));

如果您刚刚完成字符串操作,并且不一定需要正则表达式,则可以简单地使用字符串。替换方法。

 yourString = yourString.Replace("#> + <#", "#>,<#");