需要修复一个正则表达式,它取代了太多

时间:2012-08-13 10:34:14

标签: c# regex replace

我有这样的字符串:

Text [City 1 || Location] text [Population] 
|| Text [City 2 || Location] text [Population]

我需要替换||的正则表达式只在[]内==。

所以我一定是:

Text [City 1 == Location] text [Population] 
|| Text [City 2 == Location] text [Population]

我写了这个正则表达式:

str = Regex.Replace(str, @"\[(.*?)\|\|(.*?)\]", "[$1==$2]");

但它取代了所有||与==。

如何解决?

2 个答案:

答案 0 :(得分:1)

编辑:尝试使用lookbehindlookahead断言:

(?<= subexpression)
Zero-width positive lookbehind assertion.  

(?= subexpression)
Zero-width positive lookahead assertion. 

答案 1 :(得分:1)

你应该能够避免匹配所有内容而只能得到'||'那样:

str = Regex.Replace(str, @"(?<=\[[^\[\]]*)\|\|(?=[^\[\]]*\])", "==");

那么这里发生了什么?

(?<=\[[^\[\]]*)这是一个零宽度的外观,匹配'['及其后的任何字符,除了'['或']'

\|\|这匹配实际的'||'

(?=[^\[\]]*\])这是一个零宽度的前瞻,匹配除'['或']'之外的任何字符,后跟']'