Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3

1. Ce que vous voulez faire

Je souhaite utiliser la chaîne correspondant au remplacement de l'expression régulière Python pour le remplacement. Je l'oublie à chaque fois, alors prends note

2. Par exemple?

Supposons que vous ayez une liste comme celle-ci dans l'analyse anglaise.

Liste avec des mots anglais


sentence = ['During', 'this', 'time', ',', 'many', 'chatterbots', 'were', 'written', 'including',
            'PARRY', ',', 'Racter', ',', 'and', 'Jabberwacky', '.']

Lorsque vous voulez en faire une chaîne de caractères (de la phrase entière), la première chose à laquelle vous pouvez penser est la jointure.

Essayez de joindre avec un délimiteur d'espace demi-largeur


' '.join(sentence)
#During this time , many chatterbots were written including PARRY , Racter , and Jabberwacky .

Oui ... Comme vous l'avez peut-être deviné, il y a un espace demi-largeur ** devant le . ou,. J'étais en difficulté Alors que faire ... C'est vrai. Remplacez par une expression régulière! Mais comment le remplacer par , ou .?

3. Réutilisez la chaîne correspondante à la destination de remplacement

Faisons-le pour le moment.

Corrigez-le comme du texte anglais


import re

bad = ' '.join(sentence)
fixed = re.sub(r' ([,.])', r'\1', bad)
# r' [,.]' :Espace demi-largeur+「,」「.N'importe quel

print(fixed) 

production


During this time, many chatterbots were written including PARRY, Racter, and Jabberwacky.

Achevée!

4. Un petit commentaire

Lors de l'utilisation de re.sub Dans la chaîne de caractères de modèle du premier argument, placez la partie que vous souhaitez réutiliser dans () Spécifiez le nombre () que vous souhaitez utiliser pour la partie que vous souhaitez remplacer la chaîne de caractères du deuxième argument, ": \ 1 si c'est le premier". Sur cette base, j'écrirai quelques exemples.

check.py


bad = 'including PARRY , Racter , and Jabberwacky .'

#Celui du plus tôt
re.sub(r' ([,.])', r'\1', bad)
Out[4]: 'including PARRY, Racter, and Jabberwacky.'

# 「(L'emplacement est différent
re.sub(r'( [,.])', r'\1', bad)
Out[5]: 'including PARRY , Racter , and Jabberwacky .' # == bad

# 「()Essayez de fermer l'espace avec
re.sub(r'( )([,.])', r'\1', bad)
Out[6]: 'including PARRY  Racter  and Jabberwacky '

#Changer le numéro à utiliser
re.sub(r'( )([,.])', r'\2', bad)
Out[7]: 'including PARRY, Racter, and Jabberwacky.'

#Essayez de vous connecter et d'utiliser
re.sub(r'( )([,.])', r'\1\2', bad)
Out[8]: 'including PARRY , Racter , and Jabberwacky .' # == bad

#Et le contraire
re.sub(r'( )([,.])', r'\2\1', bad)
Out[9]: 'including PARRY,  Racter,  and Jabberwacky. ' # != bad

#Essayez de jouer
re.sub(r'( )([,.])', r'\1 Hoge\2', bad)
Out[12]: 'dont PARRY Hoge,Racter Hoge,et Jabberwacky Hoge.'

Supplément

Assurez-vous de préfixer `` \ num' avec r. <sup> <a href="#%E8%BF%BD%E8%A8%9820170119"> Remarques supplémentaires </a> <sup /> Bon exemple r '\ 1' Mauvais exemple'\ 1'`

Postscript (19/01/2017)

Si vous ajoutez une barre oblique inverse \, cela fonctionnera sans le r.

*** Merci à shiracamus de nous l'avoir fait savoir dans les commentaires. *** ***

Dans le cas de '\ num', il est nécessaire d'ajouter r, mais si c'est \ num', il n'est pas nécessaire d'ajouter r`. r signifie raw (raw = raw, raw) et est une chaîne brute (brute) qui ne traite pas les backslashes comme des caractères d'échappement.

>>> import re
>>> bad = 'including PARRY , Racter , and Jabberwacky .'
>>> re.sub(' ([,.])', '\\1', bad)
'including PARRY, Racter, and Jabberwacky.'

Si vous avez d'autres questions, veuillez nous le faire savoir dans les commentaires.

Recommended Posts

Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
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
[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.
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Déterminer si la chaîne est l'heure avec une expression régulière python
Remplacement de chaîne par une expression régulière Python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Un mémo contenant Python2.7 et Python3 dans CentOS
[Mémo personnel] Obtenez des données sur le Web et faites-en un DataFrame
[Python] Récupérez les fichiers dans le dossier avec Python
Décrypter une chaîne chiffrée sur iOS avec Python
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Transformez un programme Python en démon et exécutez-le automatiquement au démarrage du système d'exploitation
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Utilisez python sur Raspberry Pi 3 pour éclairer la LED quand il fait noir!
Installez le sélénium sur votre Mac et essayez-le avec python
Faire un point d'arrêt sur la couche c avec python
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Lors de l'écriture d'une instruction if avec une expression régulière
Recevoir des e-mails de Gmail et étiqueter avec Python3
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
[CGI] Exécutez le programme Python du serveur avec Vue.js + axios et obtenez les données de sortie
[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?
Jusqu'à ce que vous créiez un environnement d'apprentissage automatique avec Python sur Windows 7 et que vous l'exécutiez
Associez Python Enum à une fonction pour la rendre appelable
Obtenez la page Web Python, encodez et affichez les caractères
Débarrassez-vous des données sales avec Python et les expressions régulières
Créez un script de déploiement avec fabric et cuisine et réutilisez-le
Manipulation d'expressions régulières par Python
Fabriquez un thermomètre BLE et obtenez la température avec Pythonista3
Mettez Ubuntu dans Raspi, mettez Docker dessus et contrôlez GPIO avec python à partir du conteneur
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
Jeu de vie avec Python [je l'ai fait] (sur terminal et Tkinter)
Comment est le progrès? Continuons le boom ?? en Python
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Premiers pas avec le framework Python Django sur Mac OS X
Comment obtenir toutes les valeurs possibles dans une expression régulière
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Un mémorandum lors de l'acquisition automatique avec du sélénium
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
l'expression régulière de python, str et unicode sont sobres et addictives
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
Résolvez le problème du sac à dos Python avec la méthode de branche et liée
Installez lp_solve sur Mac OSX et appelez-le avec python.
Obtenez la formule dans le fichier Excel sous forme de chaîne en Python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
Python - Obtenez le taux de bitcoin BTC / JPY à partir de bitflyer à intervalles réguliers et enregistrez-le dans un fichier
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
Utilisez AWS lambda pour récupérer les actualités et notifier régulièrement LINE des mises à jour [python]
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python