2016-04-10 11 views
0

私はPythonクラスで正規表現を学んだだけで、Regexのコードを理解する助けが必要です。Visaクレジットカード正規表現:グループ化アサーション

\b4[0-9]{12}(?:[0-9]{3})\b 

私はちょうど最後の部分が何を意味するのか疑問に思って:コードは、一般的なクレジットカードの検索質問です

(?:[0-9]{3})\b 

が、私はそれがアサーションをグループ化された別のソースから読み込まれますが、誰が説明してくださいすることができますそれは私にはっきりと分かりましたか?

さらに、末尾の\ bは何を表していますか?

ありがとうございました

+0

この場合、 '(?:)'は何も寄与せず、省略することもできますが、それらの間のものではありません! – Kevin

+0

\ bは '境界'または '境界'を表します。これは単語の先頭または末尾に一致します。私は非常に便利だと思っていますが、あなたが使用しているシステムがどんな文字を単語の一部とみなしているかを理解することは難しいかもしれません。 (たとえば、ダッシュカウントはアンダースコアですか?) –

答えて

0

括弧を使用して、一致するグループを識別します。

?:がマーク非キャプチャグループ

>>> s = '4123412341234123' 
>>> print (re.match(r"\b4[0-9]{12}(?:[0-9]{3})\b", s).groups()) 
() 
>>> print (re.match(r"\b4[0-9]{12}([0-9]{3})\b", s).groups()) 
('123',) 

\bは、単語の境界文字

+0

ありがとうございます。印刷の例はそれをはるかに明確にします – gosok

1

ノンキャプチャグループといいます。つまり、VISAカードは新しいカードであるか長いカードであるかに応じて16〜13桁の長さであるため、?:の後に続くグループはオプションです。これにより、3つのオプションの数字が追加され、検索に含まれる場合と含まれない場合があります。

最後の\ bは、引用符で全体の単語検索と考えることができます。

詳細については、このウェブサイトをチェックしてください: http://www.regular-expressions.info/creditcard.html

乾杯を!

0

(?:)non-capturing基を表す一致します。それは、それに続くマッチをキャプチャしないことを意味します。 ()(?:)ではなく)を使用すると、変数内で一致するものはすべてキャプチャされ、後で言語がサポートする$1または\1として使用できます。 (?:)を使用した場合、その一致はどの変数にも格納されません。

\bは単語境界を示す。これは、単語文字と非単語文字の間の位置です。

(?: #Non-capturing group (Do not store it in a variable) 
    [0-9] #Match any digit between 0 to 9 
    {3} #Do this three times (i.e Match any digit between 0 to 9 three times) 
) 
\b #Word boundary 
関連する問題