常用模块- re模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用模块- re模块相关的知识,希望对你有一定的参考价值。
一:什么是正则?
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
生活中处处都是正则:
比如我们描述:4条腿
你可能会想到的是四条腿的动物或者桌子,椅子等
继续描述:4条腿,活的
就只剩下四条腿的动物这一类了
二:常用匹配模式(元字符)
1.\\w匹配字符数字下划线 print(re.findall(‘\\w‘,‘as213df_*|‘)) 结果: [‘a‘, ‘s‘, ‘2‘, ‘1‘, ‘3‘, ‘d‘, ‘f‘, ‘_‘] 2.\\W匹配非字符数字下划线 print(re.findall(‘\\W‘,‘as213df_*|‘)) 结果: [‘*‘, ‘|‘] 3.print(re.findall(‘a\\wb‘,‘a_b a3b aEb a*b‘))#匹配a b直接的匹配字符数字下划线 结果: [‘a_b‘, ‘a3b‘, ‘aEb‘] 4.匹配任意空白字符 等价于【\\t\\n\\r\\f】 print(re.findall(‘\\s‘,‘a b\\nc\\td‘)) 结果 [‘ ‘, ‘\\n‘, ‘\\t‘] 5.\\S匹配任意非空字符 print(re.findall(‘\\S‘,‘a b\\nc\\td‘)) 结果 [‘a‘, ‘b‘, ‘c‘, ‘d‘] 6.匹配任意数字,等价于[0-9] print(re.findall(‘\\d‘,‘a123bcdef‘)) 结果 [‘1‘, ‘2‘, ‘3‘] 7.\\D匹配任意非数字 print(re.findall(‘\\D‘,‘a123bcdef‘)) 结果 [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘] 8.匹配字符\\n print(re.findall(‘\\n‘,‘a123\\nbc\\ndef‘)) 结果 [‘\\n‘, ‘\\n‘] 9.匹配\\t print(re.findall(‘\\t‘,‘a123\\tbc\\td\\tef‘)) 结果 [‘\\t‘, ‘\\t‘, ‘\\t‘] 10.匹配字符 ‘h’ print(re.findall(‘^h‘,‘hello egon hao123‘)) 结果 [‘h’] print(re.findall(‘^h‘,‘hello egon hao123‘)) 结果 [] 11.匹配字符串末尾 print(re.findall(‘3$‘,‘e3ll3o e3gon hao123‘)) 结果 [‘3‘] 12 匹配任意字符除了换行 #匹配a和b中件除了换行的任意字符 print(re.findall(‘a.c‘,‘abc a1c a*c a|c abd aed ac‘)) 结果 [‘abc‘, ‘a1c‘, ‘a*c‘, ‘a|c‘] print(re.findall(‘a.c‘,‘abc a1c a*c a|c abd aed a\\nc‘,re.S)) #让点能够匹配到换行符 结果 [‘abc‘, ‘a1c‘, ‘a*c‘, ‘a|c‘, ‘a\\nc‘]
13.
#匹配a开头包含“1”,"2",“\\n” 并且以c结尾的字符
print(re.findall(‘a[1,2\\n]c‘,‘a2c a,c abc a1c a*c a|c abd aed a\\nc‘))
结果
[‘a2c‘, ‘a,c‘, ‘a1c‘, ‘a\\nc‘]
14.匹配a开头包含0-9并且c结尾的字符
print(re.findall(‘a[0-9]c‘,‘a2c a11c abc a1c a*c a|c abd aed a\\nc‘))
结果[‘a2c‘, ‘a1c‘]
15.匹配开头a包含0-9 a-z A-Z * -并且以c结尾的字符
print(re.findall(‘a[0-9a-zA-Z*-]c‘,‘a1c abc a*c a-c aEc a-1c‘))
结果:[‘a1c‘, ‘abc‘, ‘a*c‘, ‘a-c‘, ‘aEc‘]
16.a开头b结尾不包含0-9数字的字符
print(re.findall(‘a[^0-9]c‘,‘a1c a2c a*c a-c aEc‘))
结果:[‘a*c‘, ‘a-c‘, ‘aEc‘]
17.匹配以a开头b最少0最大无线
print(re.findall(‘ab*‘,‘a ab b‘))
结果
print(re.findall(‘ab*‘,‘a ab baaa abbbbbbbbbbbbbbbb ac‘))
print(re.findall(‘ab*‘,‘bbbbbb‘))
结果[]
18.“+” a开头b最少得有一个
print(re.findall(‘ab+‘,‘a‘))
结果:[]
print(re.findall(‘ab+‘,‘bbbbbb‘))
结果:[]
19.ab开头结尾包含1或者2或者3
print(re.findall(‘ab[123]‘,‘ab1 ab2 ab3 bbbbb1‘))
结果[‘ab1‘, ‘ab2‘, ‘ab3‘]
20.ab开头1、2、3结尾最少包含1个
print(re.findall(‘ab[123]+‘,‘ab11111111 ab2 ab3 abc1‘))
结果:[‘ab11111111‘, ‘ab22222222‘, ‘ab3‘]
print(re.findall(‘ab[123]+‘,‘ab1 ab2 ab3 ab4 ab123‘))
结果:[‘ab1‘, ‘ab2‘, ‘ab3‘, ‘ab123‘]
print(re.findall(‘ab[123][123][123]‘,‘ab1 ab2 ab3 ab4 ab123‘))
结果:
[‘ab123‘]
21.
print(re.findall(‘ab{3}‘,‘ab1 abbbbbbbb2 abbbbb3 ab4 ab122‘))#限制b的长度
结果:[‘abbb‘, ‘abbb‘]
print(re.findall(‘ab{0,}‘,‘a123123123 ab1 abbb123 abbbbbbb123 abbbbbtb‘))#b 0个到无穷大
结果:[‘a‘, ‘ab‘, ‘abbb‘, ‘abbbbbbb‘, ‘abbbbb‘]
print(re.findall(‘ab{2,}‘,‘a123123123 ab1 abb123 abbbb123 abbbbbt‘))
结果:[‘abb‘, ‘abbbb‘, ‘abbbbb‘]
22.
print(re.findall(‘a.*c‘,‘a2c abc aec a1c‘))#贪婪方式匹配a和c之间除了换行任何字符
结果:[‘a2c abc aec a1c‘]
23.
print(re.findall(‘a.*?c‘,‘ac abc aec a1c‘))#a到c之间任意字符
结果:[‘ac‘, ‘abc‘, ‘aec‘, ‘a1c‘]
print(re.findall(‘a.*?c‘,‘ac abc a111111111c a\\nc a1c‘,re.S))#\\n需要转意
结果:[‘ac‘, ‘abc‘, ‘a111111111c‘, ‘a\\nc‘, ‘a1c‘]
24.()分组
#(y|ies)找到y和ies结尾的
print(re.findall(‘compan(?:y|ies)‘,‘Too many companies have gone bankrupt, and the next one is my company‘))
结果:[‘companies‘, ‘company‘print(re.findall(‘(ab)+123‘,‘ababab123‘)) #[‘ab‘],匹配到末尾的ab123中的ab
结果:[‘ab‘]
print(re.findall(‘(?:ab)+123‘,‘ababab123‘))
结果:[‘ababab123‘]
print(re.findall(r‘a\\\\c‘,‘a\\c‘)) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
结果:[‘a\\\\c‘]
print(re.findall(‘a\\\\\\\\c‘,‘a\\c‘)) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
print(re.findall(r‘a\\\\c‘,‘a\\c‘)) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
print(re.findall(‘a\\\\\\\\c‘,‘a\\c‘)) #同上面的意思一样,和上面的结果一样都是[‘a\\\\c‘]
以上是关于常用模块- re模块的主要内容,如果未能解决你的问题,请参考以下文章
python全栈开发第九篇Python常用模块一(主要是re正则和collections)