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.
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)
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. |
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.
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'
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. |
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)
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']
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)
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. |
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
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
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
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