当前位置:网站首页>Re expression régulière

Re expression régulière

2022-04-23 17:59:00 Nom Qgy

reExpression régulière

  Une expression régulière est une séquence spéciale de caractères,Peut aider l'utilisateur à vérifier si une chaîne correspond à un modèle,Pour obtenir une récupération ou un remplacement rapide d'un modèle、Texte de la règle.équivalent àWordFonctions de recherche et de remplacement dans.

import re
text='178,168,123456,9537,123456'
print(re.findall('123456',text))
#Out:
['123456', '123456']

1 Reconnaître les expressions régulières

Tableau1 Règles de syntaxe de base pour correspondre à une classe de caractères
Caractère régulier Tracer Description
. Division correspondante"\n"Tout caractère individuel autre que.La gamme la plus large.Pour correspondre, inclure’\n’N'importe quel caractère à l'intérieur,Disponible en’[.\n]'Mode
\d Correspond à un caractère numérique,Équivalent à[0-9]
\D Correspond à un caractère non numérique,Équivalent à[^0-9]
\s Correspond à n'importe quel caractère d'espace,Inclure des espaces、Tabulation、Sauts de page, etc,Équivalent à[\f\n\r\t\v]
\S Correspond à des caractères non blancs,Équivalent à[^\f\n\r\t\v]
\w Correspond aux caractères numériques de n'importe quel mot, y compris les soulignements,Équivalent à[A-Za-z0-9_]
\W Correspond à n'importe quel non - mot、Nombre、Caractère souligné,Équivalent à[^A-Za-z0-9_]
Tableau2 [ ] Spécifiez une plage ou des caractères spécifiques
Caractère régulier Tracer Description
[Pp]ython Ça correspondPythonOupython
rub[ye] Ça correspondrubyOurube
[aeiou] Correspond à l'une des lettres entre parenthèses
[0-9] Correspond à n'importe quel nombre,Équivalent à[0123456789]
[a-z] Correspond à n'importe quelle petite lettre
[A-Z] Correspond à n'importe quelle lettre majuscule
[a-zA-Z0-9] Correspond à n'importe quelle lettre et n'importe quel nombre
[^aeiou] Division correspondanteaeiou Tous les caractères sauf les lettres
[^0-9] Correspond à tous les caractères sauf les nombres
import re
text='Taille:180,Poids corporel:130,Numéro d'étudiant:123456,Mot de passe:9537'
print(re.findall(r'\d',text))
print(re.findall(r'\S',text))
print(re.findall(r'\w',text))
print(re.findall(r'[1-5]',text))
print(re.findall(r'[ Poids élevé ]',text))
#Out:
['1', '7', '8', '1', '6', '8', '1', '2', '3', '4', '5', '6', '9', '5', '3', '7']
['Corps', 'Élevé', ':', '1', '7', '8', ',', 'Corps', 'Lourd', ':', '1', '6', '8', ',', 'Études', 'No.', ':', '1', '2', '3', '4', '5', '6', ',', 'Dense', 'Code', ':', '9', '5', '3', '7']
['Corps', 'Élevé', '1', '7', '8', 'Corps', 'Lourd', '1', '6', '8', 'Études', 'No.', '1', '2', '3', '4', '5', '6', 'Dense', 'Code', '9', '5', '3', '7']
['1', '1', '1', '2', '3', '4', '5', '5', '3']
['Élevé', 'Lourd']
Tableau3 Nombre de répétitions de caractères Quantificateur
Caractère régulier Tracer Description
* 0Ou plus
+ 1Ou plus
? 0Ou1- Oui.
{2} 2- Oui.
{2,5} 2-5- Oui.
{2,} Au moins2- Oui.
{,5} Tout au plus.5- Oui.
text = "my telephone number is 15951817010,and my hometown's telephone \
number is 13863417300,my landline number is 0634-5608603."
print(re.findall(r'\d{4}-\d{7}(?# Numéro de téléphone )', text))
#Out:
['0634-5608603']
Tableau4 Mode combiné
Exemple régulier de combinaison Tracer Description
\d{6}[a-z]{6} Deux sous - modèles s'assemblent pour former un grand modèle ,Ça correspond6Nombre plus6Petites lettres
\d{6}|[a-z]{6} Utilisez une ligne verticale pour indiquer qu'il y a une correspondance entre les deux modèles avant et arrière ,Ça correspond6Un nombre ou6Petites lettres
(abc){3} Groupes entre parenthèses , Les quantificateurs peuvent être appliqués en groupes après regroupement ,Ça correspondabcabcabc
\X CorrespondanceX Groupes correspondants
(?#…) Notes
###\X
text="aabbcc ddfgkk oaddww aaaaaa ababcc"
print(re.findall(r'(\w{2})(\1)',text))
print(re.findall(r'(\w{2})(\1)(\2)',text))
#Out:
[('aa', 'aa'), ('ab', 'ab')]
[('aa', 'aa', 'aa')]
###(?#...)
text = "my telephone number is 15951817010,and my hometown's telephone \
number is 13863417300,my landline number is 0634-5608603."
print(re.findall(r'\d{4}-\d{7}(?# Numéro de téléphone )', text))
#Out:
['0634-5608603']
Tableau5 Emplacement
Caractère régulier Tracer Description
^ Correspond au début de la chaîne
$ Correspond à la fin de la chaîne
\A Début de la chaîne correspondante
\Z Fin de la chaîne de correspondance,S'il y a une nouvelle ligne, Ne correspond qu'à la chaîne de fin avant le saut de ligne
\b Correspond aux limites des mots, C'est la position entre le mot et l'espace .Par exemple:er\b Ça correspond.neverDanser,Mais ça ne correspond pas.verbDanser
\B Correspond à une limite non verbale.Par exemple:er\BÇa correspond.verbDanser,Mais ça ne correspond pas.neverDanser
(?=…) Le contenu correspondant est …Avant
(?!..) Le contenu correspondant n'est pas présent …Avant
(?<=…) Le contenu correspondant est …Après
(?<!..) Le contenu correspondant n'est pas présent …Après
###(?=...)
text="height:180,weight:63,student_num:2020802178,key:hello_world"
print(re.findall(r'\w+(?=:2020802178)',text))
#Out:
['student_num']
###(?<=...)
print(re.findall(r'(?<=key:)\w+',text))
#Out:
['hello_world']

   Le contenu des expressions régulières est vaste et profond , Vous pouvez d'abord saisir le cadre de base ,Savoir ce qu'il y a, Plongez plus profondément si nécessaire , Je pense que c'est apprendre de nouvelles connaissances 、 Une méthode d'apprentissage plus efficace pour apprendre de nouvelles choses . C'est comme apprendre un nouveau sujet , Il n'est pas nécessaire de mémoriser mot pour mot la bibliographie classique du sujet , Il suffit de maîtriser le contenu de base , Créer un réseau dans votre esprit , Quand vous avez besoin d'un endroit sur ce web, regardez - le attentivement .

2 reModule

pythonDereModule,Y compris:8Méthodes:

  • re.search(): Trouver des caractères qui correspondent au modèle ,Renvoie seulement le premier,RetourMatchObjet
  • re.match():EtsearchC'est pareil, Mais l'exigence doit correspondre au début de la chaîne ,RetourMatchObjet
  • re.findall():Renvoie une liste de toutes les chaînes correspondantes
  • re.finditer():Renvoie un Itérateur, Il contient toutes les correspondances ,C'est - à - direMatchObjet
  • re.sub(): Remplacer la chaîne correspondante , Renvoie le texte complété par le remplacement
  • re.subn(): Remplacer la chaîne correspondante , Renvoie le texte complété et le nombre de substitutions
  • re.split(): Segmenter la chaîne originale en utilisant la chaîne de l'expression correspondante comme séparateur
  • re.compile():Compiler une expression régulière en un objet,Facile à utiliser à l'arrière

Ci - dessus8 Les méthodes peuvent être divisées en 4Colonnes, Recherche respectivement ,Remplacer, Diviser et compiler .

2.1 Trouver,Oui.4Méthodes:search、match、findall、finditer

2.1.1 search - Retour seulement1- Oui.

import re
text = "abc,Abc,aBC,abc"
print(re.search(r'abc',text))
#Out:
<re.Match object; span=(0, 3), match='abc'>

  search La méthode est de retourner un MatchObjet, Et une seule valeur est retournée ,span=(0,3) Ça veut dire qu'il correspond à 1-3Caractères,CommentMatch Où est la valeur correspondante dans l'objet ,Besoin d'utilisergroupMéthodes.

import re
text = "abc,Abc,aBC,abc"
m = re.search(r'abc', text)
print(m.group())
#Out:
abc

  group Méthode la valeur de retour sans paramètre donné est le résultat d'une correspondance .

   Si vous groupez les valeurs correspondantes ,Pour passer à traversgroup La méthode passe dans les paramètres du Groupe , Le résultat de la sortie est le résultat d'un certain nombre de correspondances .

text = "name:qgy,score:99;name:myt,score:98"
m = re.search(r'(name):(\w{3})',text)
print(m.group())
print(m.group(1))
print(m.group(2))
print(m.groups())
#Out:
name:qgy
name
qgy
('name', 'qgy')

Ajouter un point de connaissance ici , Ces quatre méthodes de recherche ont trois paramètres , La section précédente n'utilise que les deux premiers ,C'est ça.re.search()Exemple de méthode,

re.search(pattern,string,flags=0)

Premier paramètrepattern Est le modèle correspondant ,Deuxième paramètrestring Est la chaîne à correspondre ,flagsC'est un bit de drapeau,Utilisé pour contrôler la façon dont les expressions régulières correspondent,Par exemple::Sensible à la casse、Correspondance multiligne, etc.

text = "aBc,Abc,aBC,abc"
m = re.search(r'abc', text, flags=re.I)
print(m.group())
#Out:
aBc

   Au - dessus du milieu régulier , Ce que je veux faire correspondre abc,textN'existe pasabc,Le résultat de la correspondance estaBc.

  C'est - à - dire,re.I Est insensible à la casse .

  Pour trouverflagsQu'est - ce que,On peut tenirctrl Cliquez sur le bouton dans votre script reLieu d'occurrence,Ça va sortir.re.pyDocumentation, Appuyez et maintenez sous le fichier ctrl+F, Boîte de recherche pop - up ,EntréeflagsVous pouvez voirflags Quels paramètres avez - vous? .

Insérer la description de l'image ici

2.1.2 match - C'est juste un retour. 1- Oui., Mais ça correspond à partir de zéro.

text = "xaBc,Abc,aBC,abc"
m = re.match(r'abc', text, flags=re.I)
n = re.search(r'^abc',text,flags=re.I)
print(m)
print(n)
#Out:
None
None

  Dans le code ci - dessus,Je vaisaBcAjouté avantx,UtilisermatchMéthodes,Ça correspondtextDébut du caractère, Si le caractère de départ ne correspond pas à l'expression régulière ,La correspondance échouera,Les résultats retournés sontNone.

re.match(r’‘,text) Équivalent à re.search(r’^',text)

Pour être honnête,matchÇa ne sert à rien.,Concevoir cecimatch Ça donne l'impression de peindre un serpent ,AvecsearchÇa suffit.

2.1.3 findall - Renvoie toutes les chaînes correspondantes

text = "name:qgy,score:99;name:myt,score:98"
m = re.findall(r'(name):(\w{3})',text)
print(m)
#Out:
[('name', 'qgy'), ('name', 'myt')]

  findallLa méthode renvoie une liste, S'il y a des groupes lors de la correspondance , Chaque valeur de la liste sera utilisée avec ()Couvrez - le., Entre différents groupes ‘,’ Diviser.

2.1.4 finditer - RetourMatchItérateur

text = "name:qgy,score:99;name:myt,score:98"
m = re.finditer(r'(name):(\w{3})',text)
print(m)
for i in m:
    print(i)
#Out:
<callable_iterator object at 0x00000224C3D5A460>
<re.Match object; span=(0, 8), match='name:qgy'>
<re.Match object; span=(18, 26), match='name:myt'>

  finditer Oui renvoie un Itérateur , Qu'est - ce qu'un Itérateur? , Je n'en ai pas besoin non plus. , Je n'ai pas pris le temps de m'occuper de . Celui - ci a été porté avec un stylo de printemps et d'automne .

Fonction de recherche 4Parmi les méthodes,search、matchEtfinditerTout revient à unMatchObjet, Peut maîtriser les bases findallEtsearch, Trouve tout. findall, Trouve - en un. search.

2.2 Remplacer,Oui.2Méthodes:sub、subn

   Les deux méthodes de remplacement ne diffèrent qu'une seule fois des quatre méthodes précédentes ,Plus de paramètres, C'est - à - dire que vous devez indiquer quels caractères vous voulez remplacer .

2.2.1 sub - C'est un mot anglais.substituteAbréviation anglaise de

text="abc,aBc,ABc,xyz,opq"
result=re.sub(r'abc','xyz',text,flags=re.I)
print(result)
#Out:
xyz,xyz,xyz,xyz,opq

2.2.2 subn - Une fois le remplacement terminé, dites - moi que quelques caractères ont été remplacés

text="abc,aBc,ABc,xyz,opq"
result=re.subn(r'abc','xyz',text,flags=re.I)
print(result)
#Out:
('xyz,xyz,xyz,xyz,opq', 3)

2.3 Diviser

  split La méthode consiste à diviser une chaîne en petites chaînes selon certaines règles .

  splitÀ quoi bon??Par exemple,, J'ai une séquence. , Je l'ai digérée avec une endonucléase de restriction , Couper la séquence originale en petits morceaux , Pour connaître la séquence des petits fragments après la coupe ,Pour passer à traverssplitComment réaliser.

MobI = "GATC"
text = "ATCGATCGGTTTAAGATCCTTCG"
result = re.split(MobI, text, flags=re.I)
print(result)
#Out:
['ATC', 'GGTTTAA', 'CTTCG']    

2.4 Compiler

  compile La méthode consiste à utiliser une expression régulière comme objet de communication , Passez l'objet dans une autre méthode et vous pouvez l'utiliser ,Fais - lesearch、findallAttendez un peu!.

   Pourquoi une compilation? , L'avantage d'utiliser la méthode de compilation est d'augmenter l'efficacité , Si une expression régulière doit être réutilisée des milliers de fois , N'est - il pas très difficile d'entrer manuellement une fois chaque correspondance , Avec les résultats compilés , Appelé directement lorsqu'il est réutilisé .

re_telephone=re.compile(r'\d{4}-\d{3,8}')
text1="Xiao ming's telephone number is 0634-4854481"
text2="Xiao hone's telephone number is 0531-145488454"
text3="Xiao gang's telephone number is 0452-567188155"
print(re_telephone.search(text1).group())
print(re_telephone.search(text2).group())
print(re_telephone.search(text3).group())
#Out:
0634-4854481
0531-14548845
0452-56718815

版权声明
本文为[Nom Qgy]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231757533626.html