2016-07-07 12 views
0

Ich lerne jetzt Python3 und bin zu re Modul gekommen. Ich möchte ein Muster schreiben, das die angegebene Zeichenfolge nach Mobilnummern durchsucht. Für indische Nr. re.compile(r'\d\d\d\d\d\d\d\d\d\d') sollte ausreichen. Aber indische Nr. Auch Verwendung +91 und 0 als Landesvorwahl und ich möchte diese auch in das Ergebnis aufnehmen. Ich habe versucht:Python re Modul Präfix

r = re.compile(r'(0|\+91)?\d\d\d\d\d\d\d\d\d\d') 

und es gibt

['+91', '0', ''] 

Als Ausgabe für r.findall(string). Wie man dieses Problem löst?

Edit: Zeichenfolge kann einen beliebigen Text wie 'no1 = 99xxxxxxxxxx, no2 = + 9199xxxxxxxxxx'.

+0

willkommen in SO. Was ist der Stringwert? –

+1

Replace '(' with '(?:'. – TigerhawkT3

+0

Wollen Sie beide Saiten zusammenbringen? – Kasramvd

Antwort

2

Als Erstes können Sie die Einschränkung verwenden, um die Anzahl der Ziffern anzugeben, anstatt sie alle einzugeben. Zweitens können Sie Nicht-Capture-Gruppierung verwenden (indem Sie an der Spitze Ihrer Gruppe hinzufügen), wenn Sie das Ergebnis der erfassten Gruppe nicht getrennt haben möchten.

r = re.compile(r'(?:0|\+91)?\d{9}') 

das Ergebnis re.findall() Bezug, wird es alle abgestimmten Gruppen umfassen Rück Gruppe 0, die durch den regulären Ausdruck das Ergebnis der angepaßten Zeichenfolge ist. Und in diesem Fall, wenn es Ihre Zeichenfolge nicht zurückgegeben hat, könnte es daran liegen, dass Ihre Eingabezeichenfolge nicht mit dieser Regex übereinstimmt.

+0

Ja, danke, dass ich die gewünschten Ergebnisse mit Ihrem Code erhalte. Könnten Sie bitte mehr Informationen über die 'geben: "Operator? Ich könnte es nicht finden. – reek12

+0

@ reek12 Wenn es hilfreich war, bitte in Betracht ziehen, die Antwort zu akzeptieren. Als ich sagte, dass das ein non-capture Gruppenzeichen ist, ist es auch'?: 'nicht': ' hier http://www.regular-expressions.info/brackets.html – Kasramvd

0

Nizza Muster für Telefon-Nummern sind

_pattern = \ 
    """ 
    ^    # string start 
    [+]?    # optional "+" 
    [\d \(\)]*  # a number of digits, blanks or brackets 
    [/]?    # an optional slash 
    [\d \(\)]*  # number of digits, blanks, brackets an this repeated none, once or multiple times 
    (([ ]?-)?  # optional: a hyphen and ... 
    [ ]?[\d \(\)]*)? # ... an optional blank and optional a number of digits, blanks or brackets 
    $    # string end 
    """   

Dieses Muster nicht jeden syntactial Fehler verfängt. Weitere Informationen finden Sie in this web page.