Ich möchte Punkte in Akronyme, aber nicht in Domänennamen in einer Python-Zeichenfolge entfernen. Zum Beispiel wollen ich die ZeichenfolgeWas ist die Regex zum Entfernen von Punkten in Akronymen, aber nicht in Domain-Namen?
'a.b.c. [email protected] http://www.test.com'
'abc [email protected] http://www.test.com'
Die nächstgelegene regex ich bisher
istre.sub('(?:\s|\A).{1}\.',lambda s: s.group()[0:2], s)
die
führt zu'ab.c. [email protected] http://www.test.com'
Es machte zu werden scheint das f oder die oben regex arbeiten, muss ich die Regex
(?:\s|\A|\G).{1}\.
ändern, aber es ist kein Ende der Spielmarker (\ G) in Python.
EDIT: Wie ich in meinem Kommentar erwähnt habe, haben die Strings keine spezifische Formatierung. Diese Zeichenfolgen enthalten informelle menschliche Konversationen und können daher null, eins oder mehrere Akronyme oder Domänennamen enthalten. Ein paar Fehler sind für mich in Ordnung, wenn es mich davor bewahren würde, einen "echten" Parser zu programmieren.
IMHO ein regulärer Ausdruck ist nicht das richtige Werkzeug für Ihr Problem. Dies ist möglicherweise möglich, führt jedoch zu übermäßig komplexem Code. Ich würde einen traditionelleren Ansatz verwenden und einen Mix-Regexs- und Python-Code verwenden, um den String in seine Komponenten aufzuteilen (normaler Text, Akronyme, ...) und die Teile einzeln zu verarbeiten. Ausführlicher, aber auch wartbarer. – sebasgo
Ich hätte wahrscheinlich erwähnen sollen, dass ich dies als Teil einer Reihe anderer Regex verwende, um eine Folge von Strings zu normalisieren, die informelle menschliche Konversationen darstellen. Ich kann ein paar Fehler tolerieren, wenn mich das vor einer gründlicheren Analyse bewahren würde. – ianalis
Sie müssen das Problem besser angeben. Handelt es sich bei Ihren Daten immer um drei voneinander getrennte Teile, und möchten Sie nur den ersten Teil beeinflussen? Oder müssen Sie dies auf beliebigen Text anwenden? Wenn das später, wie würden Sie ein Akronym definieren? Nur einzelne Buchstaben? Wenn ja, was erwartest du mit http://a.b.example.com? Oder möchten Sie eingebettete Punkte entfernen, außer wenn Sie wissen, dass sie Teil eines Domänennamens sind? Aber das wirft nur die Frage auf: Wann ist es Teil eines Domain-Namens: After @ oder http: //? Was ist mit ssh: oder anderen URL-Schemas? Einmal definiert, wäre jeder von diesen eine einfache Regex. – MtnViewMark