繁体   English   中英

使用正则表达式删除'<#'something'#>'之间的所有内容并将其替换为逗号

[英]Using regex to remove everything that is not in between '<#'something'#>' and replace it with commas

例如,我有一个字符串

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

我想使用正则表达式/字符串操作来获得以下结果:

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

我真的没有任何经验,有技巧吗?

有多种方法可以执行这样的操作,这完全取决于您的需求。 但是,如果要使用单个正则表达式操作来完成此操作,并且只想修复方括号中的内容,则可以执行以下操作:

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

该模式使用[^<>]+匹配任何非尖括号字符,但将其与后向语句( (?<=>) )和超前语句(?=<)组合在一起确保它只匹配在一组右括号和另一组括号之间出现的文本。

如果您需要删除第一个<或last >之后的文本,或者您发现环顾四周的语句令人困惑,则可能需要考虑简单地匹配方括号之间的文本,然后遍历所有匹配项自己构建一个新字符串,而不是使用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));

如果您只是在进行字符串操作之后,并且不一定需要使用正则表达式,则可以只使用string.Replace方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM