Voici l'expression régulière de "date" par python.
La version du calendrier est la suivante.
pattern = r'[12]\d{3}[/\-Année](0?[1-9]|1[0-2])[/\-Mois](0?[1-9]|[12][0-9]|3[01])journée?$'
# OK
#22 février 2020
# 2020-2-22
# 2020/2/22
# 1985/01/12
# 2010/12/11
# 2022/02/22
# NG
# 9999/99/99
La version du calendrier japonais est la suivante.
pattern = r'(Meiji|Taisho|Showa|Heisei|Reiwa)\d{1,2}Année(0?[1-9]|1[0-2])Mois(0?[1-9]|[12][0-9]|3[01])journée'
# OK
#Reiwa 22 février 2002
#22 février, 2e année de Reiwa
#22 février 1990
#22 février 1945
#22 février 1918
#22 février 1897
# NG
#Reiwa 99 septembre 1999
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 2022/02/22 Créons une expression régulière qui correspond à la chaîne de caractères.
pattern = r'2022/02/22'
Bien sûr, il s'agit d'une correspondance exacte, donc elle correspond. Vérifions avec le code.
pattern = r'2022/02/22'
string = r'2022/02/22'
prog = re.compile(pattern)
result = prog.match(string)
if result:
print(result.group())
# 2022/02/22
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 "2022/02/22", il existe d'autres dates telles que "1985/01/12" et "2010/12/11". Les expressions régulières qui correspondent à celles-ci sont les suivantes.
pattern = r'\d\d\d\d/\d\d/\d\d'
Les expressions régulières utilisées sont:
lettre | La description |
---|---|
\d | N'importe quel chiffre |
Exemple | Chaîne correspondante |
---|---|
\d\d\d\d | 2022 |
\d\d | 02, 22 |
L'expression régulière ci-dessus peut être exprimée plus facilement.
pattern = r'\d{4}/\d{2}/\d{2}'
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} | 2022 |
\d{2} | 02, 22 |
Cependant, cela entraînera également une chaîne de date impossible, telle que "9999/99/99". Cette fois, nous n'autoriserons que les conditions suivantes au format AAAA / MM / JJ.
L'expression régulière modifiée est la suivante.
pattern = r'[12]\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])'
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 |
---|---|
[12]\d{3} | 1000~2999 |
0[1-9] | 01~09 |
1[0-2] | 10~12 |
[12][0-9] | 10~29 |
3[01] | 30, 31 |
Nous avons également utilisé les expressions régulières suivantes.
lettre | La description |
---|---|
(abc|efg) | Chaîne abc ou efg |
Exemple | Chaîne correspondante |
---|---|
(0[1-9]|1[0-2]) | 01~09 ou 10~12 Autrement dit, 01~12 |
(0[1-9]|[12][0-9]|3[01]) | 01~09 ou 10~29 ou 30, 31 Autrement dit, 01~31 |
Vous disposez désormais d'une expression régulière qui ne correspond qu'aux conditions ci-dessus.
Cependant, avec cela, les choses qui ne sont pas remplies à 0 (0 avec 0), telles que "2020/2/22", ne peuvent pas être prises. L'expression régulière modifiée est la suivante.
pattern = r'[12]\d{3}\/(0?[1-9]|1[0-2])\/(0?[1-9]|[12][0-9]|3[01])$'
Les expressions régulières nouvellement utilisées sont les suivantes.
lettre | La description |
---|---|
? | Répéter 0 ou 1 du caractère précédent |
Exemple | Chaîne correspondante |
---|---|
0?[1-9] | 1~9 ou 01~09 |
Nous avons également utilisé les expressions régulières suivantes.
lettre | La description |
---|---|
$ | Fin de chaîne |
Sans cela, "2022/02/22" ne correspondra que jusqu'au "2022/02/2".
Avec cela, il est possible de gérer celui sans remplissage 0 (remplissage 0).
De plus, modifions-le pour qu'il corresponde non seulement à «/ (barre oblique)» mais aussi à «- (trait d'union)» et «année / mois (jour)».
pattern = r'[12]\d{3}[/\-Année](0?[1-9]|1[0-2])[/\-Mois](0?[1-9]|[12][0-9]|3[01])journée?$'
Ici, "\ -" est un échappement, ce qui signifie que "- (barre oblique)" n'est pas utilisé dans un sens particulier mais est un caractère.
Vous avez maintenant une expression régulière qui correspond non seulement à "/ (barre oblique)" mais également à "- (tiret)" et "année / mois (jour)".
Il n'y a pas que des calendriers occidentaux mais aussi des calendriers japonais tels que "22 février, 2ème année de Reiwa", alors faisons une expression régulière ici.
Considérez les conditions suivantes pour les dates du calendrier japonais.
L'expression régulière est la suivante.
pattern = r'(Meiji|Taisho|Showa|Heisei|Reiwa)\d{1,2}Année(0?[1-9]|1[0-2])Mois(0?[1-9]|[12][0-9]|3[01])journée'
Cette fois, j'ai utilisé Python pour créer une expression régulière pour "date".
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