Comment utiliser les expressions régulières en Python

Il semble que les opérateurs de recherche et les modèles d'expressions régulières et les règles de recherche elle-même soient presque les mêmes que Perl et PHP.

Comment utiliser la fonction de l'expression régulière est complètement différent, je vais donc l'écrire pour ma propre étude et organisation.

Ne mentionne pas les opérateurs de recherche canoniques, etc.

Réglage initial

Vous pouvez utiliser des expressions régulières en chargeant les bibliothèques suivantes.

Lis


import re

Il existe deux façons d'utiliser les expressions régulières. La première consiste à compiler le modèle à rechercher à l'avance. En utilisant cette méthode, si vous recherchez le même modèle plusieurs fois, vous pouvez effectuer une recherche à grande vitesse sans avoir à spécifier le modèle à chaque fois. http://docs.python.jp/3/howto/regex.html#compiling-regular-expressions

Ensuite, il est recommandé d'ajouter r au début du motif, c'est fondamentalement ok sans lui, mais en l'ajoutant, le caractère de barre oblique inverse dans la chaîne de caractères peut être traité comme une barre oblique inverse telle quelle, alors comment écrire le modèle Ce sera plus facile à comprendre.

http://docs.python.jp/3/howto/regex.html#the-backslash-plague

compile


pattern = r"ca"
text = "caabsacasca"
repatter = re.compile(pattern)
matchOB = repatter.match(text)

L'autre consiste à définir un modèle lors de la recherche sans compilation. Dans ce cas, si vous ne souhaitez pas réutiliser le modèle de recherche, vous devez l'utiliser.

NoCompile


pattern = r"ca"
text = "caabsacasca"
matchOB = re.match(pattern , text)

méthode de récupération

Il existe quatre méthodes de recherche principales. http://docs.python.jp/3/howto/regex.html#performing-matches

Méthode/attribut Objectif
match(pattern, string) Détermine s'il correspond à l'expression régulière au début de la chaîne.
search(pattern, string) Manipulez la chaîne pour savoir où correspond l'expression régulière.
findall(pattern, string) Recherche toutes les sous-chaînes qui correspondent à l'expression régulière et la renvoie sous forme de liste.
finditer(pattern, string) Recherche toutes les sous-chaînes qui correspondent à l'expression canonique et les renvoie en tant qu'itérateur.

Autres fonctions (référence)

http://docs.python.jp/2.7/library/re.html#re.split

Méthode/attribut Objectif
split(pattern, string) Fractionner chaque fois qu'il y a une partie qui correspond à l'expression régulière.
sub(pattern, repl, string) Remplacez la partie qui correspond à l'expression régulière par le caractère dans repl

Examinons les méthodes de recherche une par une.

fonction match ()

Il s'agit d'une fonction qui détermine si le modèle correspond au début de la chaîne. L'objet matchObject entre dans matchOB. Utilisez la fonction .group () pour extraire la partie correspondante de cet objet (str) (car il existe une fonction pour extraire des informations de l'objet autre que la fonction group (), elle sera décrite plus tard).

match


pattern = r"ca"
text = "caabsacasca"
matchOB = re.match(pattern , text)
if matchOB:
    print matchOB.group()  # 'ca'

Fonction pour récupérer les informations d'un objet

Méthode/attribut Objectif
group() Renvoie une chaîne qui correspond à l'expression régulière.
start() Renvoie la position de début de la correspondance.
end() Renvoie la position de fin de la correspondance.
span() Position de match(start, end)Renvoie un taple contenant.

fonction search ()

Une fonction qui détermine si une partie de la chaîne de caractères correspond au modèle. Contrairement à la fonction match (), elle correspond même si le motif n'est pas au début de la chaîne. Cependant, même s'il existe plusieurs correspondances, seule la première est renvoyée.

search



pattern = r"ca"
text = "caabsacasca"
matchOB = re.search(pattern , text)

if matchOB:
    print matchOB
    print matchOB.group() #Renvoie la chaîne correspondante# ca
    print matchOB.start() #Renvoie la position de départ du match# 0
    print matchOB.end()  #Renvoie la position de fin de la correspondance# 2
    print matchOB.span()  #Position de match(start, end)Renvoie un tuple contenant# (0, 2)

fonction findall ()

Une fonction qui renvoie sous forme de liste toutes les parties de la chaîne qui correspondent au modèle. Contrairement à search (), vous pouvez obtenir toutes les parties correspondantes. Cependant, la valeur de retour n'est pas un matchObject, mais juste une liste de chaînes, donc group () etc.

findall


pattern = r"ca"
text = "caabsacasca"
#Renvoie sous forme de liste tout ce qui correspond au modèle
matchedList = re.findall(pattern,text)
if matchedList:
    print matchedList # ['34567', '34567']

fonction finditer ()

Une fonction qui renvoie la partie de la chaîne qui correspond au modèle avec un itérateur. En tournant la valeur de retour pour loop etc., vous pouvez obtenir tous les points correspondants de la même manière que la fonction findall (), car la fonction findall () renvoie une liste, mais la fonction finditer () renvoie un objet dans la boucle. , End (), start (), etc. sont disponibles.

finditer


pattern = r"ca"
text = "caabsacasca"
#Renvoie tout ce qui correspond au modèle en tant qu'itérateur
iterator = re.finditer(pattern ,text)
for match in iterator:
    print match.group()   #Première fois:ca 2ème fois: ca   
    print match.start()   #Première fois:0 2ème fois: 6      
    print match.end()     #Première fois:2 2ème fois: 8      
    print match.span()    #Première fois: (0, 2)Deuxième fois: (6, 8)

Propriété

Pour les expressions régulières telles que Perl, définissez des propriétés telles que / pattern / s (. Correspond aux sauts de ligne) et `` `` / pattern / i (sensible à la casse) à la fin du modèle. Vous pouvez, mais en Python, vous procédez comme suit:

match


pattern = r"avSCSA"
text = "AVscsa"
------------------------
#Modèle à compiler

repatter = re.compile(pattern, re.IGNORECASE)#Insensible
matchOB = repatter.match(text)

------------------------
#Motif à ne pas compiler
matchOB = re.match(pattern , text, re.IGNORECASE)#Insensible
--------------------------
if matchOB:
    print match.group()  # ''

Assurez-vous d'utiliser les propriétés suivantes avec re. '' Devant elles. Comme re. DOTALL` `re. L```.

Propriété sens
ASCII, A \w, \b, \s,Et\Correspond à d etc. uniquement aux caractères ASCII avec leurs propriétés respectives.
DOTALL, S .Pour faire correspondre n'importe quel caractère, y compris les sauts de ligne
IGNORECASE, I Effectue des correspondances insensibles à la casse
LOCALE, L Correspondances selon les paramètres régionaux
MULTILINE, M ^Ou$Agit sur et correspond à plusieurs lignes
VERBOSE, X (for ‘extended’) Vous pouvez rendre disponibles des expressions régulières redondantes pour les rendre plus propres et plus faciles à comprendre.

Comment gérer le japonais

Enfin, je vais vous expliquer comment gérer le japonais, qui induit toujours en erreur les pythonistes japonais.

Il semble que le type de chaîne de caractères normal (str) puisse convenir,

Ah


matchOB = re.match("Ah","Ah")
print matchOB.group()
#Ah

Et si vous faites ce qui suit? Semble être

[Ah-ゞ]


matchOB = re.match("[Ah-ゞ]","Si")
#?

Ce n'est pas grave si vous utilisez unicode

u[Ah-ゞ]


matchOB = re.match(u"[Ah-ゞ]",u"Si")
#Si

Donc, quand vous traitez avec le japonais, faisons-le une fois

référence

str→unicode


u = "Japonais".decode("utf-8")

print type(u)
#unicode
print u 
#Japonais

unicode→str


u = u"Japonais".encode("utf-8")

print type(u)
#unicode
print u 
#Japonais

Question

De plus, lorsqu'il s'agit d'unicode, il est conseillé d'ajouter re.U en option, mais je pense que ce sera la même réponse avec ou sans lui, mais quelqu'un peut-il me le dire ~ http://pepper.is.sci.toho-u.ac.jp/index.php?%A5%CE%A1%BC%A5%C8%2FPython%2F%B4%C1%BB%FA%A4%CE%C0%B5%B5%AC%C9%BD%B8%BD

re.U


s = u'Il fait beau aujourd'hui.'
r = re.compile(u'《[^》]*》')
news = r.sub('*', s, re.U)
print s, '>', news 
#Il fait beau aujourd'hui.>il fait beau aujourd'hui*Hey

not(re.U)


s = u'Il fait beau aujourd'hui.'
r = re.compile(u'《[^》]*》')
news = r.sub('*', s)
print s, '>', news 
#Il fait beau aujourd'hui.>il fait beau aujourd'hui*Hey

référence

Cette page a été utilisée comme référence

Guide des expressions régulières - Documentation Python 3.4.1 --http: //docs.python.jp/3/howto/regex.html Un bref résumé des expressions régulières en Python - le journal de minus9d --http: //minus9d.hatenablog.com/entry/20120713/1342188160 7.2. Re - Opération d'expression régulière - Documentation Python 2.7ja1 --http: //docs.python.jp/2.7/library/re.html Gestion du japonais dans le module d'expression régulière de Python --Notes sur Linux pendant l'opération d'essai --http: //d.hatena.ne.jp/kakurasan/20090424/p1 Manipulation du japonais avec des expressions régulières python | taichino.com --http: //taichino.com/programming/1272

Recommended Posts

Comment utiliser les expressions régulières en Python
Comment utiliser SQLite en Python
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
N'utilisez pas \ d dans les expressions régulières Python 3!
Comment utiliser __slots__ dans la classe Python
Comment utiliser is et == en Python
Comment utiliser la bibliothèque C en Python
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser la bibliothèque d'images Python dans la série python3
Utiliser des expressions régulières en C
Résumé de l'utilisation de MNIST avec Python
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Comment utiliser tkinter avec python dans pyenv
Comment développer en Python
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
[Pour les débutants] Comment utiliser la commande say avec python!
J'ai essayé de résumer comment utiliser les pandas de python
Comment utiliser le modèle appris dans Lobe en Python
[Python] Comment faire PCA avec Python
Python: comment utiliser async avec
[Python] Comment utiliser la série Pandas
Comment utiliser les requêtes (bibliothèque Python)
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser l'API Python d'OpenPose
Comment envelopper C en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser la fonction zip de python
Comment gérer le japonais avec Python
[Python] Comment utiliser l'API Typetalk
Lors de l'utilisation d'expressions régulières en Python
[Python] Expressions régulières Expressions régulières
Comment utiliser la méthode __call__ dans la classe Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comment utiliser les colonnes calculées dans CASTable
Chevauchement d'expressions régulières en Python et Java
[Python] Résumé de l'utilisation des pandas
Comment définir dynamiquement des variables en Python
Comment installer et utiliser pandas_datareader [Python]
Comment faire R chartr () en Python
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
[python] Comment utiliser __command__, explication des fonctions
Comment utiliser BigQuery en Python
[Python] Comment utiliser import sys sys.argv
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Un moyen simple d'utiliser Wikipedia avec Python
Comment extraire une zone de polygone en Python