VB.NET正则表达式,匹配转义字符

时间:2010-12-03 18:48:07

标签: regex vb.net

好的,所以我讨厌问RegEx问题,因为我喜欢自己解决这些问题。另外,它在另一端变得相当烦人,因为人们可能会一直问愚蠢的“你为什么不查看”问题。

我的要求很简单。我想使用Regex.Replace将匹配替换为上下文敏感值。我为此使用了MatchEvaluator。但为了简单起见,我可以说我匹配%v

我希望%v可以逃避,所以如果我使用\%v则不会匹配。其他任何东西都应该匹配。

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

如果它出现在字符串的开头,或者它跟在除%v之外的任何字符之后,它基本上匹配\。它不捕获表达式的第一部分。

我知道这不是“正确”的做法。但它工作得很好,直到我注意到当我在替换中使用此模式时,它包含替换前%v之前的字符(对,右?)

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

我已经尝试使用谷歌搜索这个但是“退出角色”在RegEx中如此沉重的事实,所有结果都是针对逃避角色的使用而不是用模式挑选它们。

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

1 个答案:

答案 0 :(得分:5)

您可以通过捕获并将其包含在替换值中来手动将起始字符放入其中:

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