正则表达式:元字符(基本可用来匹配的字符)
Posted passengerlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式:元字符(基本可用来匹配的字符)相关的知识,希望对你有一定的参考价值。
-
# 1: 匹配单个字符与数字 . 匹配除换行符以外的任意字符 [0123456789] 是字符集合,表示匹配方括号中所包含的任意一个字符 如[Mia] 匹配‘M‘,‘i‘,‘a‘中任意一个字符 [a-z] 匹配任意小写字母 [A-Z] 匹配任意大写字母 [0-9] 匹配任意数字,类似[0123456789] [0-9a-zA-z] 匹配任意的数字和字母,(不分大小写)(不能加空格,否则也匹配空格) [[0-9a-zA-z_] 匹配任意的数字、字母和下划线 [^Mia] 匹配除了‘M‘,‘i‘,‘a‘这几个字母(符)以外的所有字符,"^"称为脱字符,表示不匹配集合中的字符,而匹配其它所有的 [^0-9] 匹配所有的非数字字符 [\d] 匹配所有的数字,效果同[0-9] [\D] 匹配非数字字符,效果同[^0-9] [\w] 匹配数字,字母和下划线,效果同[0-9a-zA-z_] [\W] 匹配非数字,字母和下划线 [\s] 匹配任意的空白符(空格,换行,回车,换页,制表),效果同[ \f\n\r\t] (Windows中回车是\r\n,换行是\n) Linux中换行是\r,回车是\n,效果一样) [\S] 匹配任意的非空白符,效果同[^ \f\n\r\t]
import re print(re.search(‘.‘,‘I love Mia,Mia is my love‘)) out:<re.Match object; span=(0, 1), match=‘I‘> # [0123456789]是字符集合,表示匹配方括号中所包含的任意一个字符 print(re.search(‘[0123456789]‘,‘i am a 9‘)) out:<re.Match object; span=(7, 8), match=‘9‘> print(re.findall(‘[\w]‘,‘jdf gh374‘)) out:[‘j‘, ‘d‘, ‘f‘, ‘g‘, ‘h‘, ‘3‘, ‘7‘, ‘4‘] print(re.findall(‘.‘,‘34j\nlf gdj‘,flags=re.S)) out:[‘3‘, ‘4‘, ‘j‘, ‘\n‘, ‘l‘, ‘f‘, ‘ ‘, ‘g‘, ‘d‘, ‘j‘]
2.
# 2: 锚字符(边界字符) ^ 行首匹配,和在[]里的^不是一个意思,即和[^]不同 $ 行尾匹配 \A 匹配字符串开始,它和^的区别是,‘\A‘只匹配整个字符串的开头,即使在re.M模式下也不会其他行的行首 \Z 匹配字符串结束,它和$的区别是,‘\Z‘只匹配整个字符串的结尾,即使在re.M模式下也不会其他行的行尾 \b 匹配一个单词的边界,也就是单词和空格间的位置(空格),如‘er\b‘可以匹配never,不能匹配nerve \B 匹配非单词边界,如‘er\b‘可以匹配nerve,不能匹配never print(re.search(‘^Mia‘,‘Mia is my love‘)) print(re.search(‘Mia$‘,‘Mia is my love,Mia‘)) print(re.search(‘^Mia$‘,‘Mia is my love,Mia‘)) out: <re.Match object; span=(0, 3), match=‘Mia‘> <re.Match object; span=(15, 18), match=‘Mia‘> None print(re.findall(‘^Mia‘,‘Mia is my love\nMia is my love‘,re.M)) print(re.findall(‘\AMia‘,‘Mia is my love\nMia is my love‘,re.M)) out: [‘Mia‘, ‘Mia‘] [‘Mia‘] print(re.findall(‘Mia$‘,‘Mia is my love,Mia\nMia‘,re.M)) print(re.findall(‘Mia\Z‘,‘Mia is my love,Mia\nMia‘,re.M)) out: [‘Mia‘, ‘Mia‘] [‘Mia‘] print(re.search(‘er\b‘,‘never‘)) out:None print(re.search(r‘er\b‘,‘never‘)) print(re.search(r‘er\b‘,‘nerve‘)) print(re.search(r‘er\B‘,‘never‘)) print(re.search(r‘er\B‘,‘nerve‘)) # 加“r”是防止转义! out: <re.Match object; span=(3, 5), match=‘er‘> None None <re.Match object; span=(1, 3), match=‘er‘>
3.
# 3: 匹配多个字符 说明:下方的x、y、z均为假设的普通字符,m、n是非负整数,不是正则表达式的元字符 (xyz) 匹配小括号内的xyz(作为一个整体去匹配) x? 匹配0个或者1个x x* 匹配0个或者任意多个x (.* 表示匹配任意0个或者任意多个字符(换行符除外) x+ 匹配至少一个x xn 匹配确定的n个x(n是一个非负整数) xn, 匹配至少n个x xn,m 匹配至少n个,最多m个x 注意:(n<=m) x|y |表示或,匹配的是x或y print(re.findall(r‘(Mia)‘,‘Mia is a good girl,Mia loves me‘)) out: [‘Mia‘, ‘Mia‘] print(re.findall(r‘o?‘,‘Mia is a good girl,Mia loves me‘) out:[‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘o‘, ‘o‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘o‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘] print(re.findall(r‘o*‘,‘oooo‘)) print(re.findall(r‘o?‘,‘oooo‘)) # 贪婪匹配,尽可能少的匹配 print(re.findall(r‘o*‘,‘ooowwoo‘)) # 贪婪匹配,尽可能多的匹配 print(re.findall(r‘.*‘,‘ooowwoo‘)) out: [‘oooo‘, ‘‘] [‘o‘, ‘o‘, ‘o‘, ‘o‘, ‘‘] [‘ooo‘, ‘‘, ‘‘, ‘oo‘, ‘‘] [‘ooowwoo‘, ‘‘] print(re.findall(r‘o+‘,‘ooowoo‘)) # 贪婪匹配,尽可能多的匹配 out:[‘ooo‘, ‘oo‘] print(re.findall(r‘o4‘,‘ooowo‘)) print(re.findall(r‘o4‘,‘oooo‘)) print(re.findall(r‘o4‘,‘ooooo‘)) print(re.findall(r‘o4‘,‘ooo‘)) print(re.findall(r‘o4‘,‘oooowooooo‘)) out: [] [‘oooo‘] [‘oooo‘] [] [‘oooo‘, ‘oooo‘] print(re.findall(r‘o3,‘,‘ooooo‘)) print(re.findall(r‘o3,‘,‘ooo‘)) print(re.findall(r‘o3,‘,‘oo‘)) print(re.findall(r‘o3,‘,‘oobooo‘)) out: [‘ooooo‘] [‘ooo‘] [] [‘ooo‘] print(re.findall(r‘o3,6‘,‘oobooo‘)) print(re.findall(r‘o3,6‘,‘oooobooo‘)) out: [‘ooo‘] [‘oooo‘, ‘ooo‘] print(re.findall(r‘(m|M)ia‘,‘mia--Mia‘)) print(re.findall(r‘((m|M)ia)‘,‘mia--mia--Mia‘)) # 打印出来是“组” out: [‘m‘, ‘M‘] [(‘mia‘, ‘m‘), (‘mia‘, ‘m‘), (‘Mia‘, ‘M‘)] # 需求:提取 import re str = ‘Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl‘ print(re.findall(r‘^Mia.*girl$‘,str)) out: [‘Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl‘]
4.
# 4: 特殊 *? +? x? 最小匹配,通常都是尽可能多的匹配,可以这种加?的方式解决贪婪匹配 光*和+代表贪婪匹配 (?:x) 类似(xyz),但不表示一个组合 print(re.findall(r‘a?‘,‘aaa‘)) out:[‘a‘, ‘a‘, ‘a‘, ‘‘] import re str = ‘Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl‘ print(re.findall(r‘^Mia.*?girl$‘,str)) print(re.findall(r‘Mia.*?girl‘,str)) print(re.findall(r‘Mia.*girl‘,str)) out: [‘Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl‘] [‘Mia is a good girl‘, ‘Mia is a nice girl‘, ‘Mia is a beautiful girl‘] [‘Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl‘] 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。 反斜杠本身需要使用反斜杠转义。 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r‘\t‘,等价于 \\t )匹配相应的特殊字符。 # 注释 : /* part1 */ /* part2 */ print(re.findall(r‘//*.*/*/‘,‘ /* part1 */ /* part2 */‘)) # 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。如*,需/*,把*转义,才表示单纯的符号* out:[‘/* part1 */ /* part2 */‘]
以上是关于正则表达式:元字符(基本可用来匹配的字符)的主要内容,如果未能解决你的问题,请参考以下文章