Ich habe eine UTF8-Zeichenfolge mit Diakritika kombinieren. Ich möchte es mit der Regex-Sequenz \w
übereinstimmen. Es passt zu Zeichen, die Akzente haben, aber nicht, wenn ein lateinisches Zeichen mit Diakritika kombiniert ist.Python regex w passt nicht zusammen Diakritika kombinieren?
>>> re.match("a\w\w\wz", u"aoooz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> print u"ao\u00F3oz"
aoóoz
>>> re.match("a\w\w\wz", u"ao\u00F3oz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> re.match("a\w\w\wz", u"aoo\u0301oz", re.UNICODE)
>>> print u"aoo\u0301oz"
aóooz
(Sieht aus wie der SO Abschlag processer ist in der oben mit den Kombinations diakritischen Schwierigkeiten hat, aber es gibt ein in der letzten Zeile)
Gibt es trotzdem mit \w
Kombinieren diakritische Zeichen entsprechen ? Ich möchte den Text nicht normalisieren, weil dieser Text von Dateiname ist, und ich möchte noch nicht eine ganze 'Dateiname-Unicode-Normalisierung' machen müssen. Das ist Python 2.5.
Ja, das wird mir sagen, ob ich ein Match habe, aber nachdem ich das Match gemacht habe, ziehe ich passende Gruppen heraus und mache dann Sachen mit ihnen. Wenn ich Ihren Ansatz verwendet habe, dann sind die Bytes, die ich später habe, nicht die gleichen Bytes wie im Dateinamen – Rory
Ich sehe. Wissen Sie, ob die Zeichenfolgen in der Verwendung von diakritischen Zeichen konsistent sind (immer kombinieren oder zumindest immer kombinieren oder nicht innerhalb einer einzelnen Zeichenfolge)? Wenn dies der Fall ist, können Sie die Ergebnisse bei Bedarf erneut auf NFC oder NFD normalisieren. Andernfalls denke ich, dass Sie auf Tricks zurückgreifen müssen, um die Position der Kombination von diakritischen Zeichen in der ursprünglichen Zeichenfolge zu ermitteln und diese Informationen zu verwenden, um nur die benötigten Zeichen zu zerlegen (was natürlich mehr Arbeit wäre, als alles zu zerlegen) ganz und gar nicht). – Steven
Oder vielleicht nur den Ausdruck ändern und verwenden Sie die Bereiche für die Kombination Diakritika, die Sie interessiert sind, und verwenden Sie etwas wie \ w [\ u0300- \ u036F]? anstelle von nur \ w – Steven