一、正则
正则表达式是一种通用的用来简洁表达一组字符串的表达式。利用正则表达式可以快速匹配和筛选字符串。通过re模块实现。
二、re模块
re模块使python语言具有全部的正则表达式功能。re模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为他们的第一个参数。
re.match():必须从字符串开头匹配,如果不是起始位置匹配成功的话返回None。
re.match(正则表达式,需要处理的字符串)
import re
a = re.match('12','12321')
print(a)
#返回<re.Match object; span=(0, 2), match='12'>
#span返回值为match在字符串中的位置
print(re.match('12','32112'))#返回None
#可以通过特定的函数来返回所需要的值:
print(a.span())#结果为(0,2),直接返回值
print(a.group())#结果为12,返回匹配到的内容
re.search()方法只在目标字符串中匹配一次满足条件的正则表达式,返回的是查找的字符在字符串中的位置。可以在任意位置进行匹配。
re.serach(正则表达式,需要处理的字符串)
import re
print(re.search('12','32112'))
#返回<re.Match object; span=(3, 5), match='12'>
匹配单个字符:
字符 | 作用 |
---|---|
. | 通配符,匹配任意字符(除了\n以外) |
\d | 匹配数字:0,1,2,3,4,5,6,7,8,9 |
\D | 匹配非数字 |
\s | 匹配空白,即(\t\n\r\f等)换页\r回车 |
\S | 匹配非空白 |
\w | 匹配单个字符,即a-z,A-Z,0-9,汉字 |
\W | 匹配非单词字符,即匹配特殊字符。 |
import re
a = re.search('.','32112')
print(a)#<re.Match object; span=(0, 1), match='3'>
print(a.group())#3
匹配多个字符:
字符 | 作用 |
---|---|
* | 匹配前一个字符出现0次或无数次 |
+ | 匹配前一个字符出现1次或无数次 |
? | 匹配前一个字符出现1次或0次 |
{m} | 匹配一个字符出现m次 |
{m,} | 匹配一个字符最少出现m次 |
{m,n} | 匹配一个字符出现m到n次 |
re.findall()匹配目标字符串中所有满足条件的正则表达式,返回所有满足匹配条件的结果,放在列表里。
re.findall(正则表达式,需要处理的字符串)
import re
print(re.findall('\d','as2112asd312'))
#输出结果为['2', '1', '1', '2', '3', '1', '2']
匹配边界:
字符 | 作用 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词边界 |
import re
print(re.findall('^a','as21,asd3,12'))#['a']
print(re.findall(r'as\b','as,aass,12'))#['as']
匹配分组:
[ ]中的列举的元素是或的关系,一次一个
import re
print(re.findall('[a-z]','asqwas1212'))
#['a', 's', 'q', 'w', 'a', 's']
( )中的元素是且的关系,取全部
import re
print(re.findall('(as)','asqwas1212'))#['as', 'as']
贪婪和非贪婪:
贪婪:在满足匹配的情况下会尽可能匹配多的内容
非贪婪:在满足匹配情况的情况下尽可能匹配少的内容
import re
print(re.findall(r'as\d+','asqwas1212'))#贪婪['as1212']
print(re.findall(r'as\d+?','asqwas1212'))#非贪婪['as1']