2012-01-05 20 views
4

Pythonと正規表現を使用する大文字で始まり文章の先頭にないテキスト部分の単語を探しています。大文字で始まる単語が正規表現で始まりません

私が考えることができる最善の方法は、単語が完全に停止してからスペースでないことを確認することです。私はかなり否定的なlookbehindを使用する必要があると確信しています。これは私がこれまで持っているもの、それが実行されますですが、常に何も返しません:

(?<!\.\s)\b[A-Z][a-z]*\b 
私は問題は単語の境界\ bの内部[AZ] [AZ] *を使用してかもしれないと思う

が、私は本当に午前わからない。

ありがとうございました。

In [6]: import re 

In [7]: re.findall(r'(?<!\.\s)\b[A-Z][a-z]*\b', 'lookbehind. This is what I have') 
Out[7]: ['I'] 

を正規表現を指定するときは、生の文字列(r'...')を使用していることを確認してください:

答えて

2

あなたの正規表現が動作しているように見えます。

正規表現が機能しない入力がある場合は、質問に追加してください。

(?!^)\b([A-Z]\w+) 

と最初のグループをキャプチャ:を使用して入力オーバー

+0

です。ありがとうございました。これは、生の文字列接頭辞を使用していなかったことでした。今は完璧に動作します。 – egd

0

試してみて、ループ。見て分かるように、一致させたい位置は線の始まり以外のすべてであるため、否定的な先読みも使用できます。ネガティブなビヘイビンドにも同じ効果があります。

1

正規表現を特に質問しましたが、リストの理解も考慮すると面白いかもしれません。これらは時には読みやすくなります(この場合はおそらく効率を犠牲にしています)。これを実現する方法の1つは、

import string 

S = "T'was brillig, and the slithy Toves were gyring and gimbling in the " + \ 
    "Wabe. All mimsy were the Borogoves, and the Mome Raths outgrabe." 

LS = S.split(' ') 

words = [x for (pre,x) in zip(['.']+LS, LS+[' ']) 
    if (x[0] in string.uppercase) and (pre[-1] != '.')] 
関連する問題