2016-04-10 4 views
0

Ich habe gerade regulären Ausdruck in meiner Python-Klasse gelernt und ich brauche Hilfe, um ein Stück Code in Regex zu verstehen. Der Code ist eine häufig gestellte Frage suchen Kreditkarte:Visa Kreditkarte regulärer Ausdruck: Gruppierung Assertion

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

ich gerade frage mich, was der letzte Teil bedeutet:

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

ich aus einer anderen Quelle gelesen, dass es Behauptung Gruppierung, aber kann jemand bitte erklären, Ist es mir klarer?

Zusätzlich, was bedeutet das \ b am Ende?

Vielen Dank

+0

In diesem Fall trägt das '(? :)' nichts und kann weggelassen werden (aber nicht das Zeug zwischen ihnen!). – Kevin

+0

\ b steht für "Grenze" oder "Grenze". Es entspricht dem Anfang oder Ende eines Wortes. Ich finde es sehr nützlich, aber es kann schwierig sein, sicherzustellen, dass Sie verstehen, welche Zeichen das System, das Sie verwenden, als Teil eines Wortes betrachtet. (Zum Beispiel, zählt ein Strich? Ein Unterstrich?). –

Antwort

0

Sie verwenden Klammern, um eine Gruppe in der Übereinstimmung zu identifizieren.

?: markiert eine Nichterfassungsgruppe

>>> 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 entspricht einer Wortgrenze Charakter

+0

Danke. Das Druckbeispiel macht es so viel klarer – gosok

1

Es ist nicht auffang Gruppe genannt. Das heißt, die Gruppe gefolgt von?: Ist optional, da VISA-Karten zwischen 16 und 13 Ziffern lang sind, je nachdem, ob es sich um eine neue Karte oder eine lange Karte handelt. Dies fügt 3 optionale Ziffern hinzu, die in der Suche enthalten sein können oder nicht.

Wie für die \ b am Ende, können Sie es als eine ganze Wort Suche in einem Zitat vorstellen.

Aktivieren Sie diese Website für weitere Informationen: http://www.regular-expressions.info/creditcard.html

Prost!

0

(?:) bezeichnet non-capturing Gruppe. Es bedeutet, dass das folgende Match nicht erfasst wird. Wenn Sie () (und nicht (?:)) verwenden, erfasst es, was in einer Variablen übereinstimmt und kann später als $1 oder \1 verwendet werden, je nachdem, was Ihre Sprache unterstützt. Wenn Sie (?:) verwenden, wird die Übereinstimmung nicht in einer Variablen gespeichert.

\b bezeichnet Wortgrenze. Es ist eine Position zwischen einem Wortzeichen und Nichtwortzeichen.

(?: #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