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

Conclusion

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

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-19 11.50.19.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 pour une date

Version du calendrier occidental

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

Version du calendrier japonais

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'

Résumé

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

J'ai essayé de créer une expression régulière de "date" en utilisant Python
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 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
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[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
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
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"
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
[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"
Je voulais collecter beaucoup d'images, j'ai donc essayé d'utiliser "google image download"