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 に答える