好吧,所以我讨厌问RegEx问题,因为我喜欢通常自己解决问题.另外,它在另一端变得相当烦人,因为人们可能会一直问愚蠢的"你为什么不查看"问题.
我的要求很简单.我想用来Regex.Replace替换具有上下文敏感值的Match.我用它MatchEvaluator来做这个.但为了简单起见,我可以说我很匹配%v
我想要%v逃避,所以如果我使用\%v它将无法匹敌.其他任何东西都应该匹配.
我想出的模式是这样的: (?:[^\\]|^)%v
它基本匹配,%v如果它出现在字符串的开头,或者它跟随除了之外的任何字符\.它不捕获表达式的第一部分.
我知道这不是"正确"的方式.但它工作得很好,直到我注意到当我在替换中使用此模式时,它包含%v替换前的字符(对,对吗?)
所以,如果我ThisIsAValue:%v和我一起Regex.Replace,用字符串替换Value,我的结果将是ThisIsAValueValue代替ThisIsAValue:Value
我已经尝试使用谷歌搜索,但事实上"退出字符"在RegEx中如此沉重,所有结果都是针对逃逸字符的使用而不是用模式挑选它们.
任何RegEx精明的人都知道我怎么能正确地做到这一点?
您可以通过捕获它并将其包含在替换值中来手动将起始字符放回:
Regex.Replace("ThisIsAValue:%v", "([^\\]|^)%v", "$1Value")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1303 次 |
| 最近记录: |