我有这样的字符串:
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]");
但它取代了所有||与==。
如何解决?
答案 0 :(得分:1)
编辑:尝试使用lookbehind
和lookahead
断言:
(?<= subexpression)
Zero-width positive lookbehind assertion.
(?= subexpression)
Zero-width positive lookahead assertion.
答案 1 :(得分:1)
你应该能够避免匹配所有内容而只能得到'||'那样:
str = Regex.Replace(str, @"(?<=\[[^\[\]]*)\|\|(?=[^\[\]]*\])", "==");
那么这里发生了什么?
(?<=\[[^\[\]]*)
这是一个零宽度的外观,匹配'['及其后的任何字符,除了'['或']'
\|\|
这匹配实际的'||'
(?=[^\[\]]*\])
这是一个零宽度的前瞻,匹配除'['或']'之外的任何字符,后跟']'