使用正则表达式将字符串中的文本替换为分隔符

时间:2011-11-21 12:07:13

标签: c# regex replace

我有一个像

这样的字符串
string str = "(50%silicon +20%!(20%Gold + 80%Silver)| + 30%Alumnium)";

我需要一个正则表达式来替换它们之间的内容!和|用空字符串。结果应为(50%silicon +20% + 30%Alumnium)

如果字符串包含类似的内容(使用嵌套分隔符):

string str = "(50%silicon +20%!(80%Gold + 80%Silver + 20%!(20%Iron + 80%Silver)|)|
              + 30%Alumnium)";

结果应为(50%silicon +20% + 30%Alumnium) - 忽略嵌套分隔符。

我尝试过以下Regex,但它不会忽略嵌套:

Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);

3 个答案:

答案 0 :(得分:5)

您正在使用延迟量词+?,它将查找与您的正则表达式匹配的最小可能子字符串。要获得您正在寻找的结果,您需要使用贪婪量词+,它将匹配可能的最大子串。

以下正则表达式(未在C#中测试,因为我没有它可用,但这适用于任何标准正则表达式实现)将执行您想要的操作:

'!.+\|'

答案 1 :(得分:2)

using System.Text.RegularExpressions;

str = Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);

答案 2 :(得分:0)

 Regex.Replace(str, @"!.+?\||\)\|", "", RegexOptions.IgnoreCase);

适用于两个提供的字符串。我通过对“)/”的第二次检查扩展了正则表达式以替换剩余的字符。