Maison > développement back-end > Tutoriel Python > Expression régulière (régulière)

Expression régulière (régulière)

大家讲道理
Libérer: 2017-05-28 09:57:34
original
2027 Les gens l'ont consulté

Regular , Pour utiliser des expressions régulières, vous devez importer le module re (abréviation de Regular) en Python. Les expressions régulières sont utilisées pour traiter les chaînes. Nous savons que les chaînes contiennent parfois beaucoup d'informations que nous souhaitons extraire. La maîtrise de ces méthodes de traitement des chaînes peut faciliter bon nombre de nos opérations.

Expression régulière (regular), une méthode de traitement des chaînes. http://www.cnblogs.com/alex3714/articles/5169958.html

L'expression régulière est une méthode couramment utilisée, car le traitement de fichiers est très courant en python et le fichier contient Chaînes Si vous souhaitez traiter des chaînes, vous devez utiliser des expressions régulières. Par conséquent, vous devez maîtriser les expressions régulières. Jetons un coup d'œil aux méthodes incluses dans les expressions régulières :

(1) match(pattern, string, flags=0)

def match(pattern, string, flags=0):
  """Essayez d'appliquer le motif à le début de la chaîne, renvoyant
un objet de correspondance, ou None si aucune correspondance n'a été trouvée."""
🎜>

Commentaire ci-dessus : essayez d'appliquer le modèle au début de la chaîne, en renvoyant un objet de correspondance, ou Aucun si aucune correspondance n'a été trouvée. Commencez la recherche à partir du début de la chaîne. et renvoie un objet de correspondance s'il n'est pas trouvé, renvoie un Aucun.

Points clés : (1) Commencez la recherche depuis le début ; (2) Renvoyez Aucun s'il n'est pas trouvé ;

Jetons un coup d'œil à quelques exemples :

import re String = "abcdef"
m = re.match("abc",string) (1) Faites correspondre "abc" et voyez quel est le résultat renvoyé
print(m)
print(m .group())
n = re.match(
"abcf",string)
print(n) (2) Lorsque la chaîne n'est pas recherchée dans la liste
l = re.match(
"bcd",string) (3) Recherche de chaîne au milieu de la liste
print(l)
<_sre.SRE_Match object; span=(0, 3), match='abc'> (1)
abc (2)
Aucun (3)
Aucun

Comme le montre le résultat de sortie ci-dessus (1), l'utilisation de match() pour faire correspondre renvoie un objet de correspondance. Si vous souhaitez le convertir en une situation visible, vous devez utiliser group() pour convertir. (2) Comme indiqué ici ; si l'expression régulière correspondante n'est pas dans la chaîne, None (3) est renvoyé ; match(pattern, string, flag) correspond au début de la chaîne et ne peut être exécuté qu'à partir du début de la chaîne Match (4) comme indiqué.

(2) fullmatch(motif, chaîne, drapeaux=0)

def fullmatch(pattern, string, flags=0):
un objet de correspondance, ou None si aucune correspondance n'a été trouvée."""
   return _compile(pattern, flags).fullmatch(string)
Commentaire d'en haut : essayez d'appliquer le motif à toute la chaîne, renvoyant un objet de correspondance, ou Aucun si aucune correspondance n'a été trouvée...

(3) recherche (motif, chaîne, drapeaux )

def search(pattern , string, flags=

0):   """Parcourir la chaîne en recherchant pour une correspondance avec le modèle, renvoyant
   un objet de correspondance, ou """
                                                                                                                         , flags) l'annotation est Analyser la chaîne à la recherche d'une correspondance avec la chaîne. modèle, renvoyant un objet de correspondance, ou None si aucune correspondance n'a été trouvée. Recherchez l'expression régulière à n'importe quelle position dans la chaîne et renvoyez l'objet de correspondance s'il est trouvé. S'il n'est pas trouvé, None est renvoyé.
Points clés : (1) Recherchez à partir de n'importe quelle position au milieu de la chaîne, contrairement à match() qui recherche depuis le début (2) Si la recherche ne peut pas être trouvée, Aucune ; sera retourné;
import re
String =
"ddafsadadfadfafdafdadfasfdafafda"

m = re.search( "a",string) (1) Correspond à

à partir du milieu print(m)

print(m.group())
n = re.search("N", chaîne) (2) La situation qui ne peut pas correspondre
Imprimer (n)





Les résultats d'exécution sont les suivants :
<_sre.SRE_Match object; ; (1)
a                                                                                                                                                                                                                                                                    >

Comme le montre le résultat ci-dessus (1), search(pattern, string, flag=0) peut correspondre à partir de n'importe quelle position au milieu, ce qui élargit le champ d'utilisation, contrairement à match() qui peut ne correspond qu'au début. Et lorsqu'il correspond, un objet match_object est renvoyé ; (2) Si vous souhaitez afficher un objet match_object, vous devez utiliser la méthode group() (3) S'il est introuvable, il renvoie Aucun ; .

(4) sub(pattern,repl,string,count=0,flags=0)

 def sub(motif, repl, string, count=0, flags=0):
"""Renvoie la chaîne obtenue en remplaçant les
  occurrences non chevauchantes du motif dans la chaîne par le
   remplacement repl. repl peut être soit une chaîne, soit un appelable ;
  si une chaîne, une barre oblique inverse s'échappe qu'il contient sont traités. S'il s'agit d'un
appelable, il a transmis l'objet de correspondance et doit renvoyer
une chaîne de remplacement à utiliser."""

  return _compile(pattern, flags).sub(repl, string, count)

sub(motif,repl,string,count=0, flags=0) Rechercher et remplacer, c'est-à-dire rechercher d'abord si le modèle est dans la chaîne ; repl consiste à trouver l'objet correspondant au modèle et à remplacer les caractères trouvés par l'expression régulière par quoi count peut spécifier le nombre de ; matchs et combien de matchs. Un exemple est le suivant :

import re
String = "ddafsadadfadfafdafdadfasfdafafda"

m = re.sub(" a","A",string) #Ne précise pas le nombre de remplacements (1)
 print(m)

n = re.sub("a","A",string,2) #Spécifiez le nombre de remplacements (2)
print(n)

l = re.sub("F","B",string) #Ne peut pas correspondre à (3)
print(l)

Les résultats en cours d'exécution sont les suivants :

ddAfsAdAdfAdfAfdAfdAdfAsfdAfAfdA — (1)
ddAfsAdadfadfaf dafdadfasfdafafda - - (2)
ddafsadadfadfafdafdadfasfdafafda --(3)

Le code ci-dessus (1) ne spécifie pas le nombre de correspondances, donc la valeur par défaut est de faire correspondre toutes les correspondances (2) ; le numéro correspondant, alors seul le numéro spécifié sera mis en correspondance ; si le modèle régulier à mettre en correspondance en (3) n'est pas dans la chaîne, la chaîne d'origine sera renvoyée.

    重点:(1)可以指定匹配个数,不指定匹配所有;(2)如果匹配不到会返回原来的字符串;

    (5)subn(pattern,repl,string,count=0,flags=0)

    def subn(pattern, repl , string, count=0, flags=0):
       """Renvoie un 2-tuple contenant (new_string, number).
         new_string est la chaîne obtenue en remplaçant les occurrences les plus à gauche
       ne se chevauchant pas du motif dans la source
       chaîne de remplacement par le remplacement.   number est le nombre de
       substitutions effectuées. peut être soit une chaîne, soit un
       appelable ; si une chaîne, les barres obliques inverses qui s'y échappent sont traitées.
       S'il s'agit d'un appelable, il a transmis l'objet de correspondance et doit
renvoie une chaîne de remplacement à utiliser. >
    上面注释Renvoyer un 2-tuple contenant (new_string,number) :返回一个元组,用于存放正则匹配之后的新的字符串和匹配的个数(new_string,number)。
   
importer ré

  string =

"ddafsadadfadfafdafdadfasfdafafda"

  m = re.subn(

"a","A",string)     #
全部替换的情况 (1

  print(m)  n = re.subn("a","A",string,3) #
替换部分     (2

  print(n)  l = re.subn("F", "A", chaîne)      #指定替换的字符串不存在   (
3

  print(l)
    运行结果如下:
    ('ddAfsAdAdAdfAdfAfdAfdAdfAsfdAfAfdA' , 11)     ( 1)
  ('ddAfsAdAdfadfafdafdadfasfdafafda', 3)      (2)

  ('ddafsadadfadfafdafdadfasfdafafda', 0)       (3)

Comme le montre la sortie du code ci-dessus, sub() et subn(pattern,repl,string,count=0,flags=0) peuvent être vus que l'effet de correspondance des deux est le pareil, mais les résultats renvoyés sont juste différents. sub() renvoie toujours une chaîne, tandis que subn() renvoie un tuple, qui est utilisé pour stocker la nouvelle chaîne après l'expression régulière et le nombre de remplacements.

(6) split(motif,string,maxsplit=0,flags=0)

def split(pattern, string, maxsplit=0, flags=0):
  """Diviser la chaîne source par les occurrences du motif,
                                                                                                                                                                                                                    Renvoie une liste contenant les sous-chaînes résultantes 🎜>
. list. Si maxsplit est différent de zéro, au plus les divisions maxsplit se produisent,
et le reste de la chaîne est renvoyé comme élément final<🎜. > de la liste 🎜>
  return _compile(pattern, flags).split(string, maxsplit)


split(pattern, string, maxsplit=0, flags=0) est le fractionnement d'une chaîne. La chaîne est divisée selon un certain modèle d'exigence régulier. Renvoyer une liste contenant les sous-chaînes résultantes consiste à diviser la chaîne d'une manière ou d'une autre et à la placer dans une liste. Un exemple est le suivant :

import re

 string = "ddafsadadfadfafdafdadfasfdafafda"

 m = re.split("a",string) #
Chaîne divisée (1
)
print(m) n = re.split(" a",string,3) #
Spécifiez le nombre de fractionnements
 print(n)
 l = re.split(" F",string ) #La chaîne divisée n'existe pas dans la liste
print(l)


Les résultats en cours sont les suivants :
['dd', 'fs', 'd', 'df', 'df', 'fd', 'fd', 'df', ' sfd', 'f', 'fd', ''] (1)

['dd', 'fs', 'd', 'dfadfafdafdadfasfdafafda'] (2)

['ddafsadadfadfafdafdadfasfdafafda'] (3 )

On voit à partir de (1) que si le début ou la fin de la chaîne inclut la chaîne à diviser, l'élément suivant sera un "" en (2) on pourra préciser le nombre de fois ; à diviser ; (3) ) si la chaîne à diviser n'existe pas dans la liste, mettez la chaîne d'origine dans la liste.

(7) findall(pattern,string,flags=)

def findall(pattern, string, flags=0):
  """Renvoie une liste de toutes les correspondances qui ne se chevauchent pas dans la chaîne.

Si un ou plusieurs groupes de capture sont présents dans le modèle, renvoyez
une liste de groupes ; ce sera une liste de tuples si le modèle
a plus d'un groupe.

Les correspondances vides sont incluses dans le résultat. > findall(pattern, string, flags=) renvoie une liste contenant tous les éléments correspondants. Stocké dans une liste. Un exemple est le suivant :

import re
String =
"dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"
m = re.findall(
" [a-z]", string) #Match lettres, faire correspondre toutes les lettres, renvoyer une liste (1)
 print(m)
n = re.findall(
" [0 -9]",string) #Faire correspondre tous les nombres et renvoyer une liste (2)

print(n)l = re.findall(
"[ABC]" , String) #s s s (3)
IMPRIMER (L)






Les résultats d'exécution sont les suivants :
['d', 'd', 'a', 'd', 'f', 'a' , 'd ', 'f', 'a', 'f', 'd', 'a', 'f', 'd', 'a', 'd', 'f', 'a', 's', 'f', 'd', 'a', 'f', 'a', 'f', 'd', 'a'] (1)
['1', '2', '3' , '2', '4', '6', '4', '6', '5', '1', '6', '4', '8', '1', '5', ' 6', '4', '1', '2', '7', '1', '1', '3', '0', '0', '2', '5', '8' ] (2)
[] (3)
Le résultat de l'exécution du code ci-dessus (1) correspond à toutes les chaînes, une seule correspondance (2 Si le nombre dans ; la chaîne correspond à ), une liste sera renvoyée ; si la correspondance en (3) n'existe pas, une liste vide sera renvoyée.

Points clés : (1) Renvoie une liste vide lorsqu'aucune correspondance n'est trouvée ; (2) Si le nombre de correspondances n'est pas spécifié, une seule correspondance sera effectuée.

    (8)finditer(pattern,string,flags=0)

    def finditer(motif , string, flags=0):
       """Renvoyer un itérateur sur toutes les correspondances qui ne se chevauchent pas dans la
       chaîne.  Pour chaque correspondance, l'itérateur renvoie un objet de correspondance.

       Les correspondances vides sont incluses dans le résultat.
    finditer(pattern,string)查找模式,Renvoie un itérateur sur toutes les correspondances qui ne se chevauchent pas dans le string.Pour chaque correspondance, l'itérateur un objet de correspondance.

    代码如下:

    import re  string =

"dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"

  m = re.finditer(
"[a-z]",string)
  print(m)
  n=ré .finditer("AB",string)
  print(n)


   
    运行结果如下:

               (1)             (2)

   🎜>

    (9)compile(pattern,flags=0)

    def compile(pattern, flags= 0):        "Compilez un modèle d'expression régulière, renvoyant un objet de modèle."

       

return _compile(pattern, flags)

    (10)pruge()

    purge par définition ():        "Vider les caches d'expressions régulières"        _cache.clear()

       _cache_repl.clear()

 


    (11)template(pattern,flags=0)

    def template(pattern, flags =0):        "Compiler un modèle de modèle, renvoyant un objet de modèle"

       

return _compile(pattern, flags|T)

    正则表达式:
    语法: 

 import re
 string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"

 p = re.compile("[a -z]+") # Utilisez d'abord compile(pattern) pour compiler
m = p.match(string) #Puis faites correspondre
print(m.group())

Les 2ème et 3ème lignes ci-dessus peuvent également être combinées en une seule ligne pour écrire :

    m = p.match("^[0-9]",'14534Abc'<code class="python plain"><span style="font-family: 宋体">)</span> )

L'effet est le même, la différence est que la première façon est de compiler le format à faire correspondre à l'avance (analyser la formule de correspondance) , afin que vous n'ayez pas à compiler la correspondance formater lors d'une nouvelle correspondance Format, la deuxième abréviation signifie que la formule de correspondance doit être compilée à chaque fois qu'elle est mise en correspondance. Par conséquent, si vous devez faire correspondre toutes les lignes commençant par un nombre d'un fichier de 50 000 lignes, il est recommandé de compiler le. formule régulière d'abord puis Match, ce sera plus rapide.

Format correspondant :

(1) ^ Correspond au début de la chaîne

 
import re String =
"dd12a32d41648f27fd11a0sfdda"
#^ correspond au début de la chaîne, maintenant nous utilisons search()
pour correspondre à qui commence par un nombre m = re.search("^[0-9]",string) #
correspond à une chaîne qui commence par un nombre ( 1)
print(m)
n = re.search("^[a-z]+",string) # Correspond aux chaînes commençant avec des lettres Début, si vous faites correspondre depuis le début, il n'y a pas beaucoup de différence avec search()
(2)  print(n.group())

Le résultat courant est le suivant :


Aucun
dd

Dans (1) ci-dessus nous utilisons ^ à partir de la chaîne La correspondance commence au début et si le début de la correspondance est un nombre Puisque la chaîne est précédée de lettres et non de chiffres, la correspondance échoue et None est renvoyé à (2), nous commençons la correspondance avec des lettres. Puisque le début est une lettre, la correspondance est correcte et le résultat correct est renvoyé ; vu de cette façon, ^ est en fait similaire à match() en commençant par le début.

(2) $ Correspond à la fin de la chaîne

 import re
String = "15111252598"

#^ correspond au début de la chaîne, maintenant nous utilisons search() pour faire correspondre
commençant par un nombre m = re.match("^[0-9]{11}$",string)
print(m .group())

Les résultats en cours d'exécution sont les suivants :

15111252598

re.match("^[0-9]{11}$",string) signifie que la correspondance commence avec un nombre et a une longueur de 11. Le format se termine par un nombre

(3) Le point (·) correspond à n'importe quel caractère, à l'exception des sauts de ligne ; Lorsque la marque RE.Doall est spécifiée, elle peut être mise en correspondance avec n'importe quel caractère inclus dans le caractère de ligne

Import Re String =
"1511 n1252598"

 #dot (·) correspond à tous les caractères sauf les sauts de ligne m = re.match (
".",string) #Le point(·) correspond à n'importe quel caractère Si le nombre n'est pas spécifié, il correspondra à un seul (1)print( m.group())
n = re.match(
".+",string)
#.+ correspond à plusieurs caractères arbitraires, à l'exception des nouvelles lignes (2)  print(n.group())

Les résultats en cours d'exécution sont les suivants :

1

1511

Il ressort des résultats d'exécution du code ci-dessus que (1) le point (·) correspond à n'importe quel caractère ; (2) nous correspondons à plusieurs caractères, mais comme la chaîne contient des espaces, le résultat Seul le contenu situé avant le caractère de nouvelle ligne dans la chaîne correspond, et le contenu qui le suit ne correspond pas.

Points clés : (1) Le point (·) correspond à n'importe quel caractère à l'exception des caractères de nouvelle ligne ; (2) .+ peut correspondre à plusieurs caractères à l'exception des caractères de nouvelle ligne.

(4) [...] Par exemple, [abc] correspond à "a", "b" ou "c"

[objet] correspond aux caractères contenus entre parenthèses. [A-Za-z0-9] signifie correspondre à A-Z ou a-z ou 0-9.

import re
 string = "1511n125dadfadf2598"

 #[]match contient Caractères entre parenthèses
m = re.findall("[5fd]",string) # correspond à 5,f,d
dans la chaîne print( m)

Les résultats d'exécution sont les suivants :

['5', '5', 'd', 'd', 'f', 'd', 'f', '5 ' ]

Dans le code ci-dessus, nous voulons faire correspondre 5, f, d dans la chaîne et renvoyer une liste.

(5) [^...] [^abc] correspond à n'importe quel caractère sauf abc

import re
String = "1511n125dadfadf2598"

#[^] correspond aux caractères entre parenthèses
m = re.findall("[^5fd]",string) # Correspond aux caractères de la chaîne sauf 5, f, d
print(m)

Exécutez comme suit :

['1', '1', '1', 'n', '1', '2', 'a', 'a', '2', ' 9', '8']

Dans le code ci-dessus, nous faisons correspondre les caractères autres que 5, f, d [^] correspond aux caractères en dehors des crochets autres que .

(6)* Correspond à 0 expressions ou plus

import re
String = "1511n125dadfadf2598"

  #* est une expression correspondant à 0 ou plus
 m = re. findall("d*",string) #Match 0 ou plusieurs numéros
print(m)

Les résultats en cours d'exécution sont les suivants :

['1511', '', '125', '', '', '', '', '', '', '', '2598', '']

Il ressort des résultats d'exécution ci-dessus que (*) est une expression qui correspond à 0 caractères ou plus. Ce que nous faisons correspondre est 0 nombres ou plus. On peut voir que s'il n'y a pas de correspondance, le. renvoyé Vide et la dernière position renvoyée est un vide ("").

(7) + Correspond à une ou plusieurs expressions

import re
String = "1511n125dadfadf2598"

 #(+) correspond à 1 Expressions d'un ou plus
m = re.findall("d+",string) # Correspond à 1 ou plusieurs nombres
 print(m)

Exécutez comme suit :

['1511', '125', '2598']

Ajouter (+) correspond à une ou plusieurs expressions, et d+ ci-dessus correspond à une ou plusieurs expressions numériques, correspondant au moins à un nombre.

(8) ? Correspond à 0 ou 1 expressions, de manière non gourmande

import re
 string = "1511n125dadfadf2598"

  #(?) est une correspondance0 ou 1 expressions
 m = re.findall("d?",string) #matches0 ou 1 expressions
imprimer(m)
 

Les résultats en cours d'exécution sont les suivants :

['1', '5', '1', '1', '', '1', '2', '5', '' , '', '', '', '', '', '', '2', '5', '9', '8', '']

Le point d'interrogation (?) ci-dessus doit correspondre à 0 ou 1 expressions, et ce qui précède doit correspondre à 0 ou 1 expressions. Si aucune correspondance n'est trouvée, un ("") vide est renvoyé

.

(9){n} Match n fois, définissez le nombre de correspondances pour une chaîne

(10){n , m} Faire correspondre n à m expressions

(11) w Faire correspondre les caractères alphanumériques

w est pour faire correspondre les lettres et les chiffres dans la chaîne, le code est le suivant :

import re
  string = "1511n125dadfadf2598 "

 #(?) est une expression qui correspond à 0 ou 1
m = re.findall("w",string) #correspond à 0 ou 1 expressions
print( m)

Exécutez comme suit :

['1', '5', '1 ', '1', '1', '2', '5', 'd', 'a', 'd', 'f', 'a', 'd', 'f', '2', '5', '9', '8']

Comme vous pouvez le voir dans le code ci-dessus, w est utilisé pour faire correspondre les caractères alphanumériques de la chaîne. Nous utilisons des expressions régulières pour faire correspondre les lettres et les chiffres.

(12) W Le W majuscule est utilisé pour faire correspondre les non-lettres et les chiffres, ce qui est exactement l'opposé du w minuscule

Les exemples sont les suivants :

import re
  string = "1511n125dadfadf2598"

 #W est utilisé pour faire correspondre les non-lettres et les chiffres dans la chaîne
 m = re.findall("W",string) #W est utilisé pour faire correspondre les caractères autres que les lettres et les chiffres dans la chaîne
print(m)

Exécutez comme suit :

['n']

Dans le code ci-dessus, W est utilisé pour faire correspondre les non-lettres et les chiffres, le résultat est que les nouvelles lignes correspondent.

(13)s Correspond à n'importe quel caractère d'espacement, équivalent à [ntf]

Les exemples sont les suivants :

import re
String = "1511n125dt ardffadf2598"

  #s est utilisé pour correspondre à n'importe quel caractère d'espacement dans la chaîne, équivalent Dans [ntrf]
 m = re.findall("s",string) #s est utilisé pour faire correspondre n'importe quel caractère vide dans la chaîne
imprimer (m)
 

Exécutez comme suit :

['n', 't', 'r', 'x0c ']

Comme le montrent les résultats d'exécution du code ci-dessus : s est utilisé pour faire correspondre n'importe quel caractère vide. Nous avons fait correspondre le caractère vide

(14) S Correspond à n'importe quel caractère non vide

Les exemples sont les suivants :

import re string =
"1511n125dtardffadf2598"

 #S est utilisé pour correspondre à tout caractère non vide m = re.findall(
"S",string) #S est utilisé pour correspondre à n'importe quel jour Caractères non vides
 print(m)
​ ​

​ Exécutez comme suit :

​ ['1', '5', '1', '1', '1', '2', '5', 'd', 'a', 'd', 'f', 'a', 'd', 'f' , '2', '5', '9', '8']

Comme le montre le code ci-dessus, S est utilisé pour correspondre à n'importe quel caractère non vide. Dans le résultat, nous correspond à n'importe quel caractère non vide.

(15)d Correspond à n'importe quel nombre, équivalent à [0-9]

( 16 ) D Correspond à n'importe quel non-numéro

Résumé : findall() et split() génèrent des listes, l'un utilise un certain comme séparateur et l'autre utilise une recherche dans toutes les valeurs dans . Bien au contraire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal