【问题标题】:Using regex to remove everything that is not in between '<#'something'#>' and replace it with commas使用正则表达式删除不在 '<#'something'#>' 之间的所有内容并将其替换为逗号
【发布时间】:2016-01-28 04:58:51
【问题描述】:

我有一个字符串,例如

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

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

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

我真的没有这方面的经验,有什么建议吗?

【问题讨论】:

  • 您的预期结果中的逗号在哪里?
  • 哎呀完全忘记了,我赶紧补充一下
  • 转义的&lt;&gt; 可以出现在括号内的字符串中吗?
  • 他们不会,只会是字母数字值。

标签: c# regex string c#-4.0


【解决方案1】:

有多种方法可以执行此类操作,具体取决于您的需要。但是,如果您想使用单个正则表达式操作来执行此操作,并且只想修复括号中的字符串之间的内容,那么您可以这样做:

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

该模式使用[^&lt;&gt;]+ 来匹配任何非尖括号字符,但它将它与一个后向语句((?&lt;=&gt;))和一个前瞻语句(?=&lt;) 相结合,以确保它只匹配出现在一组右括号和另一组左括号之间的文本。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2015-10-05
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多