/ / python regex mit Unicode, um einen Städtenamen zu finden - Python, Regex, Unicode

Python-Regex mit Unicode, um mit einem Städtenamen übereinzustimmen - Python, Regex, Unicode

Ich habe einen Städtenamen in Unicode, und ich möchtepassen Sie es mit Regex ab, aber ich möchte auch überprüfen, ob es sich um einen String handelt, wie "New York". Ich suchte ein bisschen und probierte unten etwas aus, konnte aber nicht herausfinden, wie?

Ich habe diesen Regex "([u0000-uFFFF] +)" auf dieser Website ausprobiert:http://regex101.com/#python und es funktioniert, konnte es aber nicht in Python zum Laufen bringen.

Danke im Voraus!!

city=u"Hu0101na"
mcity=re.search(r"([u0000-uFFFFA-Za-zs]+)", city, re.U)
mcity.group(0)
u"H"

Antworten:

1 für die Antwort № 1
mcity=re.search(r"([u0000-uFFFFA-Za-zs]+)", city, re.U)

nicht wie x, u ist keine spezielle Sequenz in der Regex-Syntax, daher entspricht Ihre Zeichengruppe einem literalen Backslash, dem Buchstaben U usw.

Um auf Nicht-ASCII-Zeichen in einem regulären Ausdruck zu verweisen, müssen Sie sie als unformatierte Zeichen in eine Unicode-Zeichenfolge einschließen, z. B. als:

mcity=re.search(u"([u0000-uFFFFA-Za-z\s]+)", city, re.U)

(Wenn Sie den s, Sie könnten auch eine ur String, in dem u funktioniert immer noch als flucht aber die andere flieht gerne x don "t. Dies ist jedoch etwas verwirrend.)

Diese Zeichengruppe ist redundant: der Bereich U + 0000 bis U + FFFF deckt bereits alles ab A-Za-zsund in der Tat die gesamte mehrsprachige Basisebeneeinschließlich Steuerzeichen. Bei einem engen Python-Build (einschließlich Windows Python 2-Builds), bei dem die Zeichen außerhalb des BMP mit Ersatzpaaren im Bereich U + D800 bis U + DFFF dargestellt werden, lassen Sie tatsächlich jedes einzelne Zeichen zu, sodass es nicht viel ist eines Filters. (.+ wäre eine einfachere Art, es zu sagen.)

Andererseits ist es ziemlich schwierig, was auszudrückenkönnte einen gültigen Ortsnamen in verschiedenen Teilen der Welt darstellen. Ich wäre versucht, alles zu akzeptieren, was ohne Steuerzeichen und vorangestellte / nachgestellte Leerzeichen keine leere Zeichenfolge war.