我正在尝试使用正则表达式从字符串中删除子字符串,从左到右,这意味着我想要识别正确的分隔符,然后删除所有内容,直到在左边找到最接近的分隔符(不是其他方式)周围,左右分隔符是不同的)。
一个例子:
string myInput = "This [[ should stay and [[ this sould go | this should stay ]] as well";
string myRegex = "\\[\\[(.*?)\\|";
string myOutput = Regex.Replace (myInput, myRegex,"");
我想删除" |"中的所有内容第一个" [["在左边,但正则表达式从第一个" [["在句子中直到" |"。
I get: myOutput = "This this should stay ]] as well"
When what I really want is: "This [[ should stay and this should stay ]] "
非常感谢!
答案 0 :(得分:0)
你需要使用否定的先行断言。
myOutput = Regex.Replace(myInput, @"\[\[(?:(?!\[\[).)*?\|", "");
(?:(?!\[\[).)*?
会匹配任何字符,但不会与[[
非贪婪地匹配。也就是说,这将检查要匹配的角色不会成为[[
中的第一个角色的条件。如果是,那么它将匹配相应的字符,否则匹配将失败,因为实际遵循负向前瞻的模式是\|
(匹配文字管道符号),它期望立即跟随管道符号
答案 1 :(得分:0)
答案 2 :(得分:0)
使用此代码,我添加了一个否定的字符类,以确保我们在双[
之后无法捕获[
:
string myInput = "This [[ should stay and [[ this sould go | this should stay ]] as well";
string myRegex = @"\[\[([^\[]*?)\|";
string myOutput = Regex.Replace(myInput, myRegex, "");
输出:
This [[ should stay and this should stay ]] as well