RegEx取代@除非前面有/

时间:2013-05-23 19:09:12

标签: .net regex

我需要一个正则表达式,用于将@替换为@,除非@前面有<。我一直在摆弄RegExHero以试图做到这一点,但这不太对。值得注意的是,在正则表达式方面我很无能为力。

以下是我的尝试:

正则表达式 [^<]\@

替换字符串 &/@

目标字符串 Flip@

这几乎可行,因为它不会取代Flip&lt; @。但它不起作用,因为它取代了Flip @到Fli / @。基本上,我需要在符号前面没有尖括号的情况下保留原始字符。

2 个答案:

答案 0 :(得分:9)

你措辞的方式正是负面后瞻断言的定义。

(?<!<)@

一般来说,

(?<!foo)bar

表示“bar”不遵循“foo”。 正面后瞻,

(?<=foo)bar
相反,

意味着“bar”跟随“foo”。

还有前方例如

bar(?=foo)

意思是“bar”后跟“foo”。

答案 1 :(得分:4)

表达式无法按预期工作的原因是表达式捕获@符号前面的字符,使其成为替换目标的一部分。您需要使用[^<]更改(?<!<)以使用非捕获negative lookbehind。最终的表达式应如下所示:

(?<!<)\@