2013-05-13 14 views
5

空白文字または文字列の末尾をテキストに一致させたい。python regex:空白文字または文字列の末尾に一致する

import re 


uname='abc' 
assert re.findall('@%s\s*$' % uname, '@'+uname) 
assert re.findall('@%s\s*$' % uname, '@'+uname+' '+'aa') 
assert not re.findall('@%s\s*$' % uname, '@'+uname+'aa') 

パターンが正しくありません。
pythonの使い方は?あなたは、生の文字列を使用しない場合は\文字をエスケープする必要があり

assert re.findall('@%s\\s*$' % uname, '@'+uname) 

答えて

13

\s*$が正しくありません:これは「ゼロ以上のスペース文字列の末尾に続く」ではなく「1つ以上のスペースまたは文字列の終わり」よりも、一致します。

この状況では、私は (?:\s+|$)(生の文字列の中に、他に言及しているように)を使用します。 (?:)の部分は、部分式の区切りで、|演算子は正しいフラグメントと一致し、正しいフラグメントのみと一致します。

+2

小さな修正: '\ s * $'は文字列の末尾に__zero__以上の空白がある場合に一致します – stonesam92

+0

ありがとう、修正済み。私はいつも可能な限り+を使用するので、私は__that__エラーをどのようにしたか知っています:) – kampu

0

はこれを試してみてください。

これはちょっと混乱しますが、\は、Pythonインタプリタとreモジュールのメタ文字です。

+0

申し訳ありませんが、 – whi

+0

@whiを2回も渡しませんでした。@abc aaは、空白のパターンに続けて文字列の最後に一致するため、2番目の文字は渡されませんでした。カンプの答えを見てください。 – StoryTeller

0

raw stringsを使用してください。

assert re.findall(r'@%s\s*$' % uname, '@'+uname) 

そうでない場合は、正規表現で特殊文字としての使用との定期的な文字列の競合で特殊文字として\の使用。

しかし、このアサーションは失敗することはありません。もちろん、 "@"と変数unameの内容だけで構成される文字列は、 "@"とunameの正規表現に加えてオプションの(常に空白の)空白とその文字列の最後に一致します。それは同音異義語です。私はあなたが他の何かをチェックしようとしていると思う?

関連する問題