J'ai essayé de créer une expression régulière de "montant" en utilisant Python

Conclusion

Voici l'expression régulière de "montant" par python.

La version de fin de cercle est ci-dessous.

pattern = r'^(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)Cercle'

# OK
#0 yen
# 1,000 yens
#100 yens
#12345 yens
#2000 yens
#1234 yens
#1000 yens

# NG
# 0,000 yens
#000 yens
# ,Cercle
# 10,00 yens

La version de départ de \ (marque yen) est la suivante.

pattern = r'^¥(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)$'

# OK
# ¥0
# ¥1,000
# ¥100
# ¥12345
# ¥2000
# ¥1234
# ¥1000

# NG
# ¥0,000
# ¥000
# ¥,
# ¥10,00

Préparation

L'environnement utilise Google Colaboratory. La version Python est ci-dessous.

import platform
print("python " + platform.python_version())
# python 3.6.9

L'outil de vérification des expressions régulières utilisé: https://regex101.com/ En vérifiant ici, nous allons créer une expression régulière et l'implémenter dans le code.

スクリーンショット 2020-04-20 13.32.32.png

En outre, cela est facile à comprendre sur les expressions régulières Python en général. https://qiita.com/luohao0404/items/7135b2b96f9b0b196bf3

Faisons une expression régulière de l'argent

Version fin de cercle

Écrivons le code immédiatement. Tout d'abord, importez la bibliothèque pour utiliser des expressions régulières.

import re

Tout d'abord 1000 yens Créons une expression régulière qui correspond à la chaîne de caractères.

pattern = r'1000 yens'

Bien sûr, il s'agit d'une correspondance exacte, donc elle correspond. Vérifions avec le code.

pattern = r'1000 yens'
string = r'1000 yens'
prog = re.compile(pattern)
result = prog.match(string)
if result:
    print(result.group())
#1000 yens

La chaîne de caractères correspondante s'affiche. Désormais, par souci de simplicité, seul le modèle d'expression régulière est décrit.

En plus de "1000 yens", il y a "2000 yens" et "1234 yens". Les expressions régulières qui correspondent à celles-ci sont les suivantes.

pattern = r'\d\d\d\d yen'

Les expressions régulières utilisées sont:

lettre La description
\d N'importe quel chiffre
Exemple Chaîne correspondante
\d\d\d\d 1000, 2000, 1234

L'expression régulière ci-dessus peut être exprimée plus facilement.

pattern = r'\d{4}Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
{m} Répéter m fois le caractère précédent
Exemple Chaîne correspondante
\d{4} 1000, 2000, 1234

Cependant, avec cela, vous ne pouvez pas prendre des montants autres que quatre chiffres tels que "100 yens" et "12345 yens". Traitons un nombre quelconque de chiffres.

L'expression régulière modifiée est la suivante.

pattern = r'\d+Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
+ Une ou plusieurs répétitions du personnage précédent
Exemple Chaîne correspondante
\d+ 1000, 100, 12345

Cependant, avec cela, il n'est pas possible de prendre une chaîne de caractères contenant ", (virgule)" telle que "1 000 yens". Autorisez les virgules ainsi que les chiffres.

L'expression régulière modifiée est la suivante.

pattern = r'[\d,]+Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
[abc] a,b,Toute lettre de c
Exemple Chaîne correspondante
[\d,] Numéro ou,(virgule)

J'ai également utilisé les expressions régulières suivantes:

lettre La description
+ Une ou plusieurs répétitions du personnage précédent
Exemple Chaîne correspondante
[\d,]+ Numéro ou,(Kamma) une ou plusieurs répétitions

Vous pouvez maintenant gérer les nombres et (virgule).

Cependant, cela entraînera des chaînes avec des positions de virgule incorrectes, telles que ", cercle" et "10,00 yens". La virgule est corrigée afin qu'elle soit entrée tous les 3 chiffres, tels que «1 000 yens» ou «1 000 000 yens».

L'expression régulière modifiée est la suivante.

pattern = r'\d{1,3}(,\d{3})+Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
{m,n} Répéter m ou plus et n ou moins du caractère précédent
Exemple Chaîne correspondante
\d{1,3} Répéter les nombres de 1 à 3 fois

J'ai également utilisé les expressions régulières suivantes:

lettre La description
(abc) Traitez la chaîne abc comme un bloc
Exemple Chaîne correspondante
(,\d{3}) 「,"000", comme ",(Kamma) »et 3 nombres sont traités comme un bloc

Si vous faites cela, vous ne pourrez pas prendre la chaîne de caractères sans virgules que vous aviez l'habitude de prendre. Je vais le modifier pour ne pouvoir obtenir que des chiffres.

pattern = r'(\d+|\d{1,3}(,\d{3})+)Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
(abc|efg) Chaîne abc ou efg
Exemple Chaîne correspondante
(\d+|\d{1,3}(,\d{3})+) 1000, 1,000

Cependant, cela entraînera également des chaînes de caractères basées sur 0, telles que "0,000 yen" et "000 yen".

L'expression régulière modifiée est la suivante.

pattern = r'([1-9]\d*|[1-9]\d{0,2}(,\d{3})+)Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
[a-c] a,b,Toute lettre de c
Exemple Chaîne correspondante
[1-9] 1~9 (nombres sans 0)

J'ai également utilisé les expressions régulières suivantes:

lettre La description
* Répéter 0 fois ou plus du caractère précédent
Exemple Chaîne correspondante
\d* Répétez le nombre 0 ou plusieurs fois

Vous avez maintenant exclu les chaînes basées sur 0. Cependant, seulement 0 yen doit être autorisé, alors ajoutez ceci.

pattern = r'^(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)Cercle'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
^ Le début de la chaîne

Si vous n'ajoutez pas "^ (chapeau)", "0 yen" tel que "0,000 yen" sera considéré comme une correspondance partielle.

¥ Version de début

Certains montants commencent par ¥ (yen mark) ainsi que ceux se terminant par yen, donc créons une expression régulière ici également. Dans l'expression régulière précédente, supprimez le dernier "cercle" et ajoutez "" au début.

pattern = r'^¥(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)'

Cependant, dans ce cas, "1 ¥" sur "1 000 ¥" sera considéré comme une correspondance partielle. La version modifiée est la suivante.

pattern = r'^¥(0|[1-9]\d*|[1-9]\d{0,2}(,\d{3})+)$'

Les expressions régulières nouvellement utilisées sont les suivantes.

lettre La description
$ Fin de chaîne

En ajoutant $ à la fin, il est empêché de prendre une correspondance partielle.

Résumé

Cette fois, j'ai essayé de créer une expression régulière de "montant" en utilisant Python.

Les chaînes de caractères avec un certain modèle, tel que la date, l'heure et le montant, sont compatibles avec les expressions régulières. Essayez d'extraire diverses chaînes de caractères avec des expressions régulières.

Recommended Posts

J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai créé une API Web
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
[Python] J'ai essayé d'implémenter un tri stable, alors notez
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
Je veux faire un jeu avec Python
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
Je souhaite créer une application Web en utilisant React et Python flask
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
J'ai essayé de faire un "putain de gros convertisseur de littérature"
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé de résumer comment utiliser matplotlib de python
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
J'ai essayé d'implémenter un pseudo pachislot en Python
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
Comment créer un package Python à l'aide de VS Code
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
[Python] Je veux faire d'une liste imbriquée un taple
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de dessiner une pseudo figure fractale en utilisant Python
expression canonique python ou mémo d'objet correspondant
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
[Python] J'ai essayé d'obtenir Json de squid ring 2
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
Je voulais collecter beaucoup d'images, j'ai donc essayé d'utiliser "google image download"
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook