我有一个像
这样的字符串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);
答案 0 :(得分:5)
您正在使用延迟量词+?
,它将查找与您的正则表达式匹配的最小可能子字符串。要获得您正在寻找的结果,您需要使用贪婪量词+
,它将匹配可能的最大子串。
以下正则表达式(未在C#中测试,因为我没有它可用,但这适用于任何标准正则表达式实现)将执行您想要的操作:
'!.+\|'
答案 1 :(得分:2)
using System.Text.RegularExpressions;
str = Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);
答案 2 :(得分:0)
Regex.Replace(str, @"!.+?\||\)\|", "", RegexOptions.IgnoreCase);
适用于两个提供的字符串。我通过对“)/”的第二次检查扩展了正则表达式以替换剩余的字符。