Validiert mit Python 3.5.2.
Wenn Sie beim Ersetzen durch einen regulären Ausdruck die zu ersetzende Zeichenfolge entsprechend der übereinstimmenden Zeichenfolge ändern möchten
Als Beispiel können Sie Folgendes tun.
(Ich denke, es ist möglich, eine kompliziertere Verarbeitung als das obige Beispiel durchzuführen.)
Verwenden Sie "re.sub ()", das zum Ersetzen durch normale reguläre Ausdrücke verwendet wird, und eine Funktion, die die Verarbeitung implementiert, die Sie auf die übereinstimmende Zeichenfolge anwenden möchten.
Insbesondere ist es "re (Muster, Funktion, zu durchsuchende Zeichenfolge)". Wenn das Argument der oben aufgerufenen Funktion matchobj lautet, können Sie die Zeichenfolge verwenden, die dem Muster entspricht, indem Sie matchobj.group (0) in der Funktion festlegen.
def replace(matchobj):
s = matchobj.group(0)
#Was willst du tun
re.sub(`hoge`, replace, "sampletext")
Im folgenden Beispiel werden die Funktion "toKansuji ()", die Zahlen in chinesische Zahlen konvertiert, und die Funktion "fixTax ()", die die Verbrauchsteuer von 5% auf 8% ändert, in re () vorbereitet und abgeglichen. Es wird durch das Ergebnis der Anwendung der obigen Funktion auf die Nummer ersetzt.
sample.py
import re
def toKansuji(matchobj):
a = ["einer", "Zehntausend", "Milliarde", "Billion", "Kyo"]
b = ["einer", "Zehn", "hundert", "tausend"]
c = ("", "einer", "zwei", "drei", "vier", "Fünf", "Sechs", "Sieben", "Acht", "Neun")
s = matchobj.group(0)
l = [int(i) for i in s]
result = ""
length = len(l)
for i in range(length):
n = l[length-1-i]
if i%4 == 0 and i//4 > 0:
az = 1
for j in range(4):
if l[length-1-i-j] != 0: az = 0
if az == 0: result = a[i//4] + result
if n != 0:
if i%4 != 0:
result = b[i%4] + result
if n != 1: result = c[n] + result
else:
result = c[n] + result
return result
def fixTax(matchobj):
d = int(matchobj.group(0))
d = int(d / 1.05 * 1.08)
return str(d)
if __name__ == '__main__':
s1 = "315 Yen inklusive Steuern"
print("Verbrauchssteuer 5%:", s1)
print("Verbrauchssteuer 8%:", re.sub('\d+', fixTax, s1))
s2 = "IPv4 ist 4294967296"
print("Zahlen:", s2)
print("Chinesische Ziffer:", re.sub('\d{2,}', toKansuji, s2))
Verbrauchssteuer 5%:315 Yen inklusive Steuern
Verbrauchssteuer 8%:324 Yen inklusive Steuern
Zahlen:IPv4 ist 4294967296
Chinesische Ziffer:IPv4 ist 492.494.967.296
Die beiden oberen Zeilen ersetzen die Verbrauchssteuer von 5% auf 8%, und die beiden unteren Zeilen ersetzen die Zahlen durch chinesische Zahlen.
Wenn Sie mit () im Muster gruppieren, können Sie auch die übereinstimmende Zeichenfolge in dieser Gruppe verwenden, indem Sie in der Funktion matchobj.group (n) festlegen.
(Da beide diesmal vorbereiteten Funktionen für die Funktionsprüfung vorbereitet sind, geben sie möglicherweise nicht für alle Eingaben genaue Werte zurück.)
https://docs.python.jp/3/library/re.html
Recommended Posts