Was ist der einfachste Weg, um in Python die Zeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung zu ersetzen?
python
string
case-insensitive
Adam Ernst
quelle
quelle
'hippo'
, wäre aber nützlich, wenn der zu ersetzende Wert an eine Funktion übergeben würde, also ist es wirklich mehr ein gutes Beispiel als alles andere.re.escape
Ihre Nadel benötigen , gibt es hier eine weitere Falle, die mit dieser Antwort nicht vermieden werden kann. Diese wird in stackoverflow.com/a/15831118/1709587 vermerkt : Dare.sub
Prozesse Sequenzen entgehen, wie in docs.python.org/library/re.html#re angegeben .sub , müssen Sie entweder alle Schrägstriche in Ihrem Ersatz - String zu entkommen oder ein Lambda verwenden.quelle
re.sub('hello', 'bye', 'hello HeLLo HELLO', flags=re.IGNORECASE)
re.sub
dieses Flag nur seit Python 2.7 unterstützt wird.In einer einzigen Zeile:
Oder verwenden Sie das optionale Argument "flags":
quelle
Wenn Sie die Antwort von bFloch fortsetzen, ändert diese Funktion nicht nur eine, sondern alle Vorkommen von Altem mit Neuem - in einer Weise, in der die Groß- und Kleinschreibung nicht berücksichtigt wird.
quelle
Wie Blair Conrad sagt, unterstützt string.replace dies nicht.
Verwenden Sie den regulären Ausdruck
re.sub
, aber denken Sie daran, zuerst die Ersatzzeichenfolge zu maskieren. Beachten Sie, dass es in 2.6 für keine Flags-Option gibtre.sub
, daher müssen Sie den eingebetteten Modifikator verwenden'(?i)'
(oder ein RE-Objekt, siehe Blair Conrads Antwort). Eine weitere Gefahr besteht darin, dass Sub Backslash-Escapezeichen im Ersatztext verarbeitet, wenn eine Zeichenfolge angegeben wird. Um dies zu vermeiden, kann man stattdessen ein Lambda abgeben.Hier ist eine Funktion:
quelle
Diese Funktion verwendet sowohl die
str.replace()
als auch diere.findall()
Funktionen. Es wird alle Vorkommen vonpattern
instring
mitrepl
einer Groß- und Kleinschreibung nicht berücksichtigen.quelle
Dies erfordert kein RegularExp
quelle
Eine interessante Beobachtung zu Syntaxdetails und -optionen:
Python 3.7.2 (tags / v3.7.2: 9a3ffc0492, 23. Dezember 2018, 23:09:28) [MSC v.1916 64-Bit (AMD64)] unter win32
"Graswurzel Graswurzel Graswurzel"
'TREEROOT Graswurzel TREerOot'
"Graswurzel Graswurzel Graswurzel"
'TREEROOT Graswurzel TREerOot'
Das Präfix (? I) im Übereinstimmungsausdruck oder das Hinzufügen von "flags = re.I" als viertes Argument führt also zu einer Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung. ABER die Verwendung von "re.I" als viertes Argument führt nicht zu einer Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung.
Zum Vergleich,
['TREEROOT', 'Treeroot', 'TREerOot']
['Baumwurzel']
quelle
Ich hatte keine Konvertierung in die Escape-Sequenzen (scrollen Sie etwas nach unten), daher habe ich festgestellt, dass re.sub umgekehrte Escape-Zeichen in Escape-Sequenzen konvertiert.
Um dies zu verhindern, habe ich folgendes geschrieben:
Ersetzen Sie die Groß- und Kleinschreibung nicht.
Wenn Sie möchten, dass es durch die Escape-Zeichen ersetzt wird, wie die anderen Antworten hier, bei denen die Bashslash-Zeichen mit besonderer Bedeutung in Escape-Sequenzen konvertiert werden, dekodieren Sie einfach Ihre Such- und / oder Ersetzungszeichenfolge. In Python 3 muss möglicherweise etwas wie .decode ("unicode_escape") # python3 ausgeführt werden
Getestet in Python 2.7.8
Hoffentlich hilft das.
quelle
Ich habe noch nie eine Antwort gepostet und dieser Thread ist wirklich alt, aber ich habe mir eine andere Lösung ausgedacht und dachte, ich könnte Ihre Antwort bekommen. Ich bin nicht in der Python-Programmierung erfahren. Wenn es also offensichtliche Nachteile gibt, weisen Sie sie bitte darauf hin, da es gut gelernt hat: )
quelle