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
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.
En outre, cela est facile à comprendre sur les expressions régulières Python en général. https://qiita.com/luohao0404/items/7135b2b96f9b0b196bf3
É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.
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.
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