Maison  >  Article  >  développement back-end  >  Comment apprendre les expressions régulières Python ?

Comment apprendre les expressions régulières Python ?

零下一度
零下一度original
2017-07-03 15:21:521195parcourir

Le module

re apporte la fonctionnalité complète des expressions régulières au langage Python. La

fonction de compilation génère un objet d'expression régulière basé sur un modèle chaîne et des arguments d'indicateur facultatifs. Cet objet dispose d'une série de méthodes pour la correspondance et le remplacement des expressions régulières.

re.match(pattern, string, flags=0) # 匹配成功返回一个匹配的对象,否则返回none
1 import re2 print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配 (0, 3)3 print(re.match('com', 'www.runoob.com'))        # 不在起始位置匹配 None
 1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) .*', line, re.M|re.I)  # 结果也一样 5  6 if matchObj: 7     print("matchObj.group()", matchObj.group())     # cats are smarter than dogs 8     print("matchObj.group(1)", matchObj.group(1))   # cats 9     print("matchObj.group(2)", matchObj.group(2))   # smarter10 else:11     print("No match!!")
 1 import re 2 line = "cats are smarter than dogs" 3 matchObj = re.match(r'(.*) are (.*?) (.*) .*', line, re.M|re.I) 4 # matchObj = re.match(r'(.*) are (.*) (.*) .*', line, re.M|re.I)  #这个结果也一样  5  6 if matchObj: 7     print("matchObj.group()", matchObj.group())     # cats are smarter than dogs 8     print("matchObj.group(1)", matchObj.group(1))   # cats 9     print("matchObj.group(2)", matchObj.group(2))   # smarter10     print("matchObj.group(3)", matchObj.group(3))   # than11 else:12     print("No match!!")

Utilisez la fonction d'objet de correspondance group(num) ou groups() pour obtenir l'expression de correspondance.

groups() : renvoie un tuple contenant toutes les chaînes de groupe, de 1 au numéro de groupe contenu dans .

re.search analyse la chaîne entière et renvoie la première correspondance réussie.

print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配  (0, 3)print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配  (11, 14)
1 import re2 line = "Cats are smarter than dogs";3 searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)4 if searchObj:5     print("searchObj.group() : ", searchObj.group())     # Cats are smarter than dogs   6     print("searchObj.group(1) : ", searchObj.group(1))   # Cats7     print("searchObj.group(2) : ", searchObj.group(2))   # smarter8 else:9     print("Nothing found!!")
 1 line = "Cats are smarter than dogs" 2 matchObj = re.match(r'dogs', line, re.M | re.I) 3 if matchObj: 4     print("match --> matchObj.group() : ", matchObj.group()) 5 else: 6     print("No match!!") 7  8 matchObj = re.search(r'dogs', line, re.M | re.I) 9 if matchObj:10     print("search --> matchObj.group() : ", matchObj.group())11 else:12     print("No match!!")13 '''14 No match!!15 search --> matchObj.group() :  dogs16 '''

re.match correspond uniquement au début de la chaîne si le début de la chaîne ne correspond pas à l'expression régulière, la correspondance échoue et la fonction renvoie Aucun while re ; .search correspond à la chaîne de caractères entière jusqu'à ce qu'une correspondance soit trouvée. Le module

1 re.search(pattern, string, flags=0)2 re.sub(pattern, repl, string, count=0, flags=0)

re fournit re.sub pour remplacer les correspondances dans une chaîne.

Paramètres :

  • modèle : chaîne de modèle dans une expression régulière.

  • repl : La chaîne à remplacer, ou peut être une fonction .

  • string : La chaîne d'origine à rechercher et à remplacer.

  • count : Le nombre maximum de substitutions après la correspondance de modèles. La valeur par défaut est 0, ce qui signifie remplacer toutes les correspondances.


1 phone = "2004-959-559 # 国外电话号码"2 # 删除字符串中的Python注释3 num = re.sub(r'#.*$', "", phone)4 print("电话号码是:", num)        # 电话号码是: 2004-959-559 5 6 # 删除非数字(-)的字符串7 num = re.sub(r'\D', "", phone)8 print("电话号码是:", num)        # 电话号码是: 2004959559

Le paramètre repl est une fonction

1 # 将匹配的数字乘于22 def double(matched):3     value = int(matched.group('value'))4     return str(value * 2)5 6 s = 'A23G4HFD567'7 print(re.sub('(?P<value>\d+)', double, s))
re.I Rendre la correspondance insensible à la casse
re . L Effectuer une correspondance tenant compte des paramètres régionaux
re.M Correspondance multiligne, affectant ^ et $
re.S faire correspondre tous les caractères, y compris les sauts de ligne
re .U Analyse les caractères selon le jeu de caractères Unicode
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 w, W, b, B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
. Cet indicateur affecte w, W, b, B.
re Écrit pour être plus facile à comprendre.

re.I | re.M... Plusieurs indicateurs peuvent être spécifiés via OR au niveau du bit (|).

Modèle d'expression régulière

Les chaînes de modèles utilisent une syntaxe spéciale pour représenter une expression régulière : les lettres et les chiffres se représentent eux-mêmes.

^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}  
re{ n,} 精确匹配n个前面表达式。
re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b 匹配a或b
(re) G匹配括号内的表达式,也表示一个组
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
w 匹配字母数字及下划线
W 匹配非字母数字及下划线
s 匹配任意空白字符,等价于 [tnrf].
S 匹配任意非空字符
d 匹配任意数字,等价于 [0-9].
D 匹配任意非数字
A 匹配字符串开始
Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
z 匹配字符串结束
G 匹配最后匹配完成的位置。
b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
B 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
n, t, 等. 匹配一个换行符。匹配一个制表符。等
1...9 匹配第n个分组的内容。
10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

Instance

1. Correspondance de caractères

python correspondant à "python".

Classe de caractères

[Pp]ython 匹配 "Python" 或 "python"
rub[ye] 匹配 "ruby" 或 "rube"
[aeiou] 匹配中括号内的任意一个字母
[0-9] 匹配任何数字。类似于 [0123456789]
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
[a-zA-Z0-9] 匹配任何字母及数字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了数字外的字符

3. Caractère spécial classe

. 匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '[.n]' 的模式。
d 匹配一个数字字符。等价于 [0-9]。
D 匹配一个非数字字符。等价于 [^0-9]。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

r indique que la chaîne est une chaîne brute sans échappement, permettant au compilateur d'ignorer les barres obliques inverses. les caractères d'échappement sont ignorés.

(.*) Le premier groupe correspondant, * signifie faire correspondre tous les caractères à l'exception des caractères de nouvelle ligne.

(.*?) Le deuxième groupe de correspondance, *? suivi de plusieurs points d'interrogation, représente le mode non gourmand, c'est-à-dire que seuls les caractères minimum qui remplissent les conditions correspondent

Le dernier .* Aucun Entouré de parenthèses, il n'est pas regroupé. L'effet de matching est le même que le premier, mais il n'est pas inclus dans le résultat du matching.

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!

Déclaration:
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