当前位置:网站首页>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
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_] |
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']
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']
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']
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? .
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
边栏推荐
- C language input and output (printf and scanf functions, putchar and getchar functions)
- Go file operation
- 2022 judgment questions and answers for operation of refrigeration and air conditioning equipment
- C#字节数组(byte[])和字符串相互转换
- Open source key component multi_ Button use, including test engineering
- Index: teach you index from zero basis to proficient use
- Notes on common basic usage of eigen Library
- How to read literature
- 2022年流动式起重机司机国家题库模拟考试平台操作
- I / O multiplexing and its related details
猜你喜欢
云原生虚拟化:基于 Kubevirt 构建边缘计算实例
Logic regression principle and code implementation
C# 网络相关操作
Fashion classification case based on keras
2022 Jiangxi Photovoltaic Exhibition, China distributed Photovoltaic Exhibition, Nanchang solar energy utilization Exhibition
2022江西储能技术展会,中国电池展,动力电池展,燃料电池展
Laser slam theory and practice of dark blue College Chapter 3 laser radar distortion removal exercise
2022江西光伏展,中國分布式光伏展會,南昌太陽能利用展
编译原理 求first集 follow集 select集预测分析表 判断符号串是否符合文法定义(有源码!!!)
Implementation of object detection case based on SSD
随机推荐
Implementation of k8s redis one master multi slave dynamic capacity expansion
cartographer_ There is no problem compiling node, but running the bug that hangs directly
[UDS unified diagnostic service] IV. typical diagnostic service (4) - online programming function unit (0x34-0x38)
读取excel,int 数字时间转时间
re正则表达式
Dry goods | how to extract thumbnails quickly?
k8s之实现redis一主多从动态扩缩容
2022 Jiangxi Photovoltaic Exhibition, China Distributed Photovoltaic Exhibition, Nanchang Solar Energy Utilization Exhibition
Build openstack platform
[UDS unified diagnostic service] v. diagnostic application example: Flash bootloader
20222 return to the workplace
Summary of floating point double precision, single precision and half precision knowledge
Nat commun | current progress and open challenges of applied deep learning in Bioscience
ES6 new method
Implementation of image recognition code based on VGg convolutional neural network
SystemVerilog (VI) - variable
Halo open source project learning (II): entity classes and data tables
云原生虚拟化:基于 Kubevirt 构建边缘计算实例
cv_ Solution of mismatch between bridge and opencv
Leak detection and vacancy filling (6)