2017-07-21 19 views
0

私は非常に簡単な質問がありますが、私はこれに対する答えを見つけることができません。Pythonの正規表現:完全一致のみ

私のようないくつかの文字列を持っている:私は、この文字列は正確な私の条件に一致する場合、検証のためのいくつかのsmartの正規表現を持つようにしたい

test-123 

を。

私のような文字列を持つことを期待:数は1から番号の*要素に含まれている必要があります

test-<number> 

を。

import re 
correct_string = 'test-251' 
wrong_string = 'test-123x' 
regex = re.compile(r'test-\d+') 
if regex.match(correct_string): 
    print 'Matching correct string.' 
if regex.match(wrong_string): 
    print 'Matching wrong_string.' 

だから、私は(正しいと間違った文字列が一致する)の両方のメッセージを見ることができますが、私は本当に唯一の正しい文字列と一致することを期待:

することは、私はこのような何かをしようとしています。

また、matchの代わりにsearchメソッドを使用しようとしましたが、運がありませんでした。

アイデア?

答えて

3

あなたの正規表現で、開始と終了のルールを指定して試してみてください:

re.compile(r'^test-\d+$') 
+0

、ありがとうございました。私の質問が出版された直後、私はこの間違いを見つけました。 – smart

+0

@smartは本当に '$'を置く必要があります。なぜなら、 're.match'は自動的に正規表現で'^'と仮定しているからです。 – CDahn

+0

@CDahn、私は知っています。タイ! – smart

0

\btest-\d+\bはあなたを行う必要がありますのようなパターン。

matches = re.search(r'\btest-\d+\', search_string) 

Demo

これは、単語の境界のマッチングが必要なため、ご希望の試合後にoccuringから他の部分文字列を防止します。

0

あなたはre.findall()を試すことができます:

私が見る
import re 
correct_string = 'test-251' 

if len(re.findall("test-\d+", correct_string)) > 0: 
    print "Match found" 
関連する問題