Validé avec Python 3.5.2.
Lors du remplacement par une expression régulière, si vous souhaitez modifier la chaîne de caractères à remplacer en fonction de la chaîne de caractères correspondante
À titre d'exemple, vous pouvez faire ce qui suit.
(Je pense qu'il est possible d'effectuer un traitement plus compliqué autre que l'exemple ci-dessus)
Utilisez re.sub ()
, qui est utilisé pour le remplacement par des expressions régulières normales, et une fonction qui implémente le traitement que vous souhaitez appliquer à la chaîne de caractères correspondante.
Plus précisément, il s'agit de re.sub (modèle, fonction, chaîne de caractères à rechercher)
.
Si l'argument de la fonction appelée ci-dessus est matchobj, vous pouvez utiliser la chaîne de caractères qui correspond au modèle en définissant matchobj.group (0) dans la fonction.
def replace(matchobj):
s = matchobj.group(0)
#Que veux-tu faire
re.sub(`hoge`, replace, "sampletext")
Dans l'exemple ci-dessous, la fonction toKansuji ()
qui convertit les nombres en nombres chinois et la fonctionfixTax ()
qui change la taxe de consommation de 5% en 8% sont préparées et mises en correspondance dans re.sub (). Il est remplacé par le résultat de l'application de la fonction ci-dessus au nombre.
sample.py
import re
def toKansuji(matchobj):
a = ["un", "Dix mille", "Milliard", "Mille milliards", "Kyo"]
b = ["un", "Dix", "cent", "mille"]
c = ("", "un", "deux", "Trois", "quatre", "Cinq", "Six", "Sept", "Huit", "Neuf")
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 yens TTC"
print("Taxe à la consommation 5%:", s1)
print("Taxe à la consommation 8%:", re.sub('\d+', fixTax, s1))
s2 = "IPv4 est 4294967296"
print("Nombres:", s2)
print("Chiffre chinois:", re.sub('\d{2,}', toKansuji, s2))
Taxe à la consommation 5%:315 yens TTC
Taxe à la consommation 8%:324 yens TTC
Nombres:IPv4 est 4294967296
Chiffre chinois:IPv4 est 492,494,967,296
Les deux lignes du haut remplacent la taxe à la consommation de 5% à 8%, et les deux lignes du bas remplacent les chiffres par des chiffres chinois.
Si vous groupez en utilisant () dans le modèle, vous pouvez également utiliser la chaîne de caractères correspondante dans ce groupe en définissant matchobj.group (n) dans la fonction.
(De plus, étant donné que les deux fonctions préparées cette fois sont préparées pour le contrôle de fonctionnement, elles peuvent ne pas renvoyer des valeurs précises pour toutes les entrées.)
https://docs.python.jp/3/library/re.html
Recommended Posts