2010-12-03 49 views
3

好的,所以我讨厌问RegEx问题,因为我喜欢通常自己弄清楚自己。另外,它的另一端会让人觉得很烦,因为人们可能会一直在问“为什么不直接查找”问题。VB.NET正则表达式,匹配转义字符

我的要求很简单。我想使用Regex.Replace来将匹配替换为上下文相关值。我为此使用了MatchEvaluator。但为了让事情更简单,可以说我是匹配%v

我想%v是可以逃脱的,所以如果我使用\%v它不会匹配。其他任何内容都应该匹配。

我想出的模式是这样的:(?:[^\\]|^)%v

它基本上匹配%v如果它发生在字符串的开头,或者如果它遵循除了\任何字符。它没有捕捉表达式的第一部分。

我知道这不是“正确”的做法。但它的工作就好了,直到我注意到,当我在使用这种模式的替代,它包括在更换%v之前的字符(废话,对不对?)

所以,如果我有ThisIsAValue:%v,我做Regex.Replace,与更换字符串Value,我的结果将是ThisIsAValueValue而不是ThisIsAValue:Value

我试着用搜索引擎这一点,但事实上,“转义符”是正则表达式那么重,所有的结果都对转义字符的用法面向采摘代替他们与模式。

任何RegEx精明的人都知道我该如何正确地做到这一点?

+0

作为一个方面说明,一个变化可以使(这可能会或可能不会进行表达对你更简单)是将`[^ \\] | ^`改成`[^ \\]?' – bdukes 2010-12-03 18:58:12

回答

5

您可以手动将起始字符回来,通过捕捉它,包括它的替换值:

Regex.Replace("ThisIsAValue:%v", "([^\\]|^)%v", "$1Value") 
+0

+1似乎是最简单的方法。 – jball 2010-12-03 18:58:11