2017-06-09 21 views
-1

Pythonで正規表現をコンパイルしようとしていますが、成功は限られています。私は次のことをしていますPython Regexを使って作業する

import re 
pattern = re.compile("[a-zA-Z0-9_])([a-zA-Z0-9_-]*)") 
m=pattern.match("gb,&^(@)") 
if m: print 1 
else: print 2 

私は上記の2の出力を期待していますが、代わりにそれを印刷しています。正規表現は、文字列と次のように一致する必要があります。

最初の文字は英数字またはアンダースコアです。その後のすべての文字は、英数字、アンダースコア、またはダッシュにすることができ、最初の文字の後に0個以上の文字を入れることができます。

私はこのことがカンマを見てすぐに失敗すると思っていましたが、そうではありません。

私はここで間違っていますか?

+0

're.match'は、Javaで' matches() 'として完全な文字列の一致を必要としません。最後に '$ 'を追加してください。 Python 3では 're.fullmatch'を使います。 –

+0

これは私の問題を解決したようです。私はこれを正解とマークすることを願っています。ありがとう – Ryan

答えて

0
import re 
pattern = re.compile("^([a-zA-Z0-9_])([a-zA-Z0-9_-]*)$") # when you don't use $ at end it will match only initial string satisfying your regex 

m=pattern.match("gb,&^(@)") 
if m: 
    print(1) 
else: 
    print(2) 
pat = re.compile("^([a-zA-Z0-9_])([a-zA-Z0-9_-]*)") # this pattern is written by you which matches any string having alphanumeric characters and underscore in starting 

if pat.match("_#"): 
    print('match') 
else: 
    print('no match 1') 

これは、例を使って@Wiktorによる説明を理解するのにも役立ちます。