2017-03-17 21 views
3

Gibt es ein Zeichenäquivalent von \ d für Buchstaben in regulären Ausdrücken? Zum Beispiel, wenn versucht, ein numerisches Muster von Ziffern in Form zu finden "(111) 111-1111" dieser Code funktioniert:Reguläre Ausdrücke: Entspricht d für jeden Buchstaben in Python?

pattern = re.compile(r'(\(\d\d\d) (\d\d\d\-\d\d\d)') 

Aber wie würden Sie den Code neu schreiben, wenn die Muster Ziffern Buchstaben statt Zahlen? Mit anderen Worten, wie kann der obige Code geändert werden, so dass er Buchstaben des Musters "(abc) efg-hijk" entsprechen kann?

+0

Buchstaben wie in "lateinische Buchstaben ohne diakritische Zeichen"? – georg

Antwort

3

Geben Sie den folgenden Schuß:

pattern = re.compile(r'(\([a-zA-Z]{3}\)) ([a-zA-Z]{3}-[a-zA-Z]{3})') 

Sie die Erklärung zu sehen und zu bearbeiten und es here leben testen.

2

Zuerst müssen Sie entscheiden, was Sie eigentlich mit "Buchstaben" meinen, weil es in Unicode viel mehr Buchstaben gibt als in der englischen Version des lateinischen Alphabets. Wenn Sie nur die englischen wollen, das ist so einfach wie [A-Za-z], aber es gibt keine \ Abkürzung dafür. Wenn Sie das Modul regex in Python anstelle des Moduls re verwenden, können Sie direkt Unicode-Metadaten verwenden und nach einem beliebigen Zeichen mit einer bestimmten Eigenschaft fragen. In diesem Fall wird \p{Letter} den Trick machen. Sie müssen zuerst regex installieren, zum Beispiel mit pip install regex.

Beachten Sie auch, dass Sie ein Vielfaches einer Regex abgleichen können, ohne es mit der Quantifizierersyntax zu wiederholen; Ihr Beispiel geschrieben werden könnte:

pattern = re.compile(r'(\(\d{3}) (\d{3}-\d{3}') 

, die etwas mit mehr anstelle von \d etwas weniger schmerzhaft machen sollte.