使用Regex将字符串中的文本替换为分隔符

Sha*_*hah 1 c# regex replace

我有一个类似的字符串,

string str = "(50%silicon +20%!(20%Gold + 80%Silver)| + 30%Alumnium)";
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我尝试了以下正则表达式,但它不会忽略嵌套:

Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

'!.+\|'