import re
str='hello world'
ret = re.match('hello',str)print(ret.group())
2.单个字符的匹配
# . 匹配处换行符\n外的任意字符
ret = re.match('.',str)print(ret.group())# \d 匹配任意单个数字:0~9 \D 匹配任意单个非数字str='2020'
ret = re.match('\d',str)print(ret.group())str='hello'
ret = re.match('\D',str)print(ret.group())# \s 匹配任意单个空白字符(\n \t \r 空格)str=' '
ret = re.match('\s',str)print(ret.group())# \w 匹配任意单个数字字母下划线,\W正好相反str='_hello'
ret = re.match('\w',str)print(ret.group())str='=='
ret = re.match('\W',str)print(ret.group())# [] 组合方式,比如匹配单个字符为数字或者字母kstr='k461'
ret = re.match('[\dk]',str)print(ret.group())# ^ 取反,比如匹配单个字符为非数字并且非字母kstr='qwer'
ret = re.match('[^\dk]',str)print(ret.group())
3.匹配多次
# + 按前面的规则匹配1个及以上的字符串str='k456rwe'
ret = re.match('[\dk]+',str)print(ret.group())# + 按前面的规则匹配0个及以上的字符串str='k456rwe'
ret = re.match('.*',str)print(ret.group())# ? 按前面的规则匹配0个或1个字符串str='k456rwe'
ret = re.match('.?',str)print(ret.group())# {m} 按前面的规则匹配m次字符串str='k456rwe'
ret = re.match('[\w]{6}',str)print(ret.group())# {m,n} 按前面的规则匹配m~n次字符串,尽可能多str='k456rwe'
ret = re.match('[\w]{3,5}',str)print(ret.group())
4.一些特殊符号用法
# () 常用于或者(|)的情况,比如匹配urlstr='http://www.baidu.com'
ret = re.match('(http|https|ftp)://[^\s]+',str)print(ret.group())# ^ 以什么开头,match函数自带这个,所以以search为例,^在[]中表示取反str="asdfasdfasdf"
ret = re.search('^a',str)print(ret.group())# $ 以什么结尾str='asdfasdfasdf'
ret = re.match('\w+asdf$',str)print(ret.group())# ? 非贪婪模式,按尽可能少的字符取匹配,跟在匹配次数符号后面(+、*、{m,n})代表此义str='<h1>hello world</h1>'# 这里想匹配<h1>,则需要非贪婪模式,若不加?,则会匹配整个字符串
ret = re.match('<.+?>',str)print(ret.group())# 如果要匹配\c 要用4个\,因为在python字符串和re中\都是转义字符# 在python意义上,4个\转义后还有两个\,再在re意义上转义一次就变成了\cstr='\c'
ret = re.match('\\\\c',str)print(ret.group())# 这样太麻烦了,有一个办法可以把python意义上\变成原生字符串,就是用r
ret = re.match(r'\\c',str)print(ret.group())# () 分组str='123qwer6453sdfg4123gsdgf'
ret = re.match('(\d+)\D+(\d+)\D+(\d+)\D+',str)# 取出第二个()中的内容print(ret.group(2))# 取出所有()中的内容print(ret.groups())
5.常用函数
# findall函数:找出所有匹配的字符串,以列表形式返回str='123qwer6453sdfg4123gsdgf'
ret = re.findall('\d+',str)print(ret)# sub函数:替换匹配的字符串,返回替换好的字符串
ret = re.sub('\d+','0',str)print(ret)# split函数:分割字符串,返回列表str='Hello guys,nice to meet you!'
ret = re.split('[^a-zA-Z]',str)print(ret)# compile函数:对于需要执行多次的正则表达式,可以只编译一次,提高效率
r = re.compile('[^a-zA-Z]')
ret = re.split(r,str)print(ret)