2017-06-21 2 views
1

一致するオカレンスをすべて大文字にするにはどうすればよいですか?各2文字のコンボは、最初の上部、2番目の下部にあり、スペースや文字列の始まり/終わりに囲まれています。Regex - 一致するすべてのオカレンスを大文字に置き換えます。

re.sub('(|^)[A-Z][a-z]($|)', lambda m: m.group(0).upper(), loc) 

loc = ' Ny' # or ' Ny ' or 'Ny ' 

で動作しますが、私は、Python 2.7で働いているNYNY US

ない

loc = ' Ny Us' 

私は結果があることをしたいと思います。

答えて

4

あなたは先読みに最後のグループを変換することができる:

re.sub('(|^)[A-Z][a-z](?=$|)', lambda m: m.group(0).upper(), loc) 
         ^^^^^^^ 

Python demoを参照してください。

ポイントは、正規表現エンジンが直前の繰り返しでマッチした最後の文字の後のスペースと一致することを可能にすることです。

r'(?<!\S)[A-Z][a-z](?!\S)' 

this regex demoを参照してください:

は、ここでは、同じタスクのために使用することができます前後参照に基づいて代替正規表現です。 (?<!\S)負のlookbehindには、文字列の先頭または空白が前にある位置が必要です。 (?!\S)負のルックアヘッドには、文字列の終わりまたは現在の場所のすぐ右にある空白が必要です。

+1

確かに、別の方法として、単語境界( 'r '\ b [A-Z] [a-z] \ b'')を使用することです。しかし、それは少し異なる条件を満たすだろう。 –

関連する問題