Modifiez la chaîne de caractères à remplacer en fonction de la chaîne de caractères correspondante en la remplaçant par l'expression régulière Python

environnement

Validé avec Python 3.5.2.

Scène d'utilisation

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)

Méthode

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")

Exemple d'implémentation

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.

code

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))

Résultat d'exécution

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.

Autre

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.)

référence

https://docs.python.jp/3/library/re.html

Recommended Posts

Modifiez la chaîne de caractères à remplacer en fonction de la chaîne de caractères correspondante en la remplaçant par l'expression régulière Python
Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
Remplacement de chaîne par une expression régulière Python
[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?
À partir de Python 3.10, le formulaire retourné par inspect.signature () semble être basé sur typing.get_type_hints ().
Manipulation d'expressions régulières par Python
Déterminer si la chaîne est l'heure avec une expression régulière python
Comment changer le fichier de configuration pour qu'il soit lu par Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
[Python] Une fonction qui recherche la chaîne de caractères entière avec une expression régulière et obtient toutes les chaînes de caractères correspondantes.
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
[Python] Changer l'alphabet en nombre
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Correction d'un bug où node.surface ne pouvait pas être obtenu avec python3 + mecab
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
La route de la compilation vers Python 3 avec Thrift
Ce que vous voulez mémoriser avec la grammaire de base de "manipulation de chaînes" de python
Constantes Python comme None (selon la référence)
[Python] Comment changer le format de la date (format d'affichage)
Le moyen le plus simple de synthétiser la voix avec python
Essayez de résoudre le diagramme homme-machine avec Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Dites bonjour au monde avec Python avec IntelliJ
Le moyen le plus simple d'utiliser OpenCV avec python
Comment effacer les caractères générés par Python
Introduction à Python avec Atom (en route)
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python
Déterminez si le membre doit être défini sur la chaîne par défaut avec uniquement l'opérateur ou
Essayez de créer une forme d'onde (spectre audio) qui se déplace en fonction du son avec python
Comment convertir / restaurer une chaîne avec [] en python
Essayez de résoudre le livre des défis de programmation avec python3
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
[Introduction à Python] Comment itérer avec la fonction range?
0 Convertir une date non remplie en type datetime avec une expression régulière
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
J'ai essayé de toucher un fichier CSV avec Python
Changer les paramètres IP en ACL de conoha avec python
Détruire l'expression intermédiaire de la méthode sweep avec Python
Changer le mouvement en changeant la liste déroulante avec tkinter
J'ai essayé de résoudre Soma Cube avec python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Lisez le fichier xml en vous référant au didacticiel Python
Convertissez l'image au format .zip en PDF avec Python
Je veux hériter de l'arrière avec la classe de données python
Décale la chaîne de l'alphabet de N caractères en Python
Spécifiez MinGW comme compilateur utilisé dans Python
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
J'ai essayé de résumer les opérations de chaîne de Python
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Comment calculer le rayonnement X (CXB) de fond d'espace avec Python en spécifiant la plage de flux
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python