我有一个类似的字符串,
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.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);发布于 2011-11-22 03:39:19
您使用的是惰性量词+?,它将查找与您的正则表达式匹配的最小可能的子字符串。要得到您想要的结果,您需要使用贪婪量词+,它将匹配尽可能大的子字符串。
下面的正则表达式(没有在C#中测试,因为我没有提供它,但它应该适用于任何标准的正则表达式实现)将执行您想要的操作:
'!.+\|'
发布于 2011-11-21 20:10:56
using System.Text.RegularExpressions;
str = Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);发布于 2011-11-22 02:07:24
Regex.Replace(str, @"!.+?\||\)\|", "", RegexOptions.IgnoreCase);对两个提供的字符串都有效。我扩展了正则表达式,对")/“进行了第二次检查,以替换剩余的字符。
https://stackoverflow.com/questions/8211535
复制相似问题