2011-12-13 5 views
3

を経由して、文字列内の別の文字のn番目の出現から始まる文字を置き換える正規表現

foo ,bar ,2345 

2番目のコンマまでの空白はそのまま残ります。

+1

その他の技術はありますか?これは正規表現だけではあまりにも複雑になります。 –

+0

'foo、bar、2345'を出力してはいけませんか?あるいは、スペースをコンマの右側から左に移動することになっていますか? –

+0

@JasonMcCreary良い点!正規表現だけでは見つからず、置き換えられません。私たちはperl、js、何を話していますか? – Mathletics

答えて

3

\s+(?=[^,]*$) 

を検索すると、何も交換してください。これは、文字列の前にコンマがない場合に限り、空白文字にマッチします。

ルールを実装する場合は、文字列に2番目のカンマの後にすべての空白があり、後にコンマがあるかどうかにかかわらず、lookbehindアサーション内で不定な繰り返しを処理できる正規表現エンジンが必要です。現在のところ、.NETとJGSoftエンジンだけがこれを行います。そのうちの1つを使用している場合は、罰金:

(?<=(?:,[^,]*){2})\s+ 

は、少なくとも2つ前にカンマがある場合は空白に一致します。

+0

+1、非常に優雅です。私はポジティブなルックアヘッドを過小評価しました。私はすべてのエンジンがそれらをサポートしているとは思わない。私を見せてくれる方法:) –