1

我有这样的字符串:

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]");

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

如何解决?

4

2 回答 2

1

编辑:尝试使用lookbehindlookahead断言:

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

(?= subexpression)
Zero-width positive lookahead assertion. 
于 2012-08-13T10:38:46.853 回答
1

您应该能够避免匹配所有内容而只获得“||” 像那样:

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

那么这里发生了什么?

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

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

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

于 2012-08-13T10:42:44.787 回答