line = 'cocct123' # '^c' 代表以c开头 match_line = '^c' if re.match(match_line,line): print('匹配') #' ^c.*' 代表以c开头,任何字符结尾 match_line =' ^c.*' if re.match(match_line,line): print('匹配') # '3$' 代表以3结尾的 match_line = '3$' if re.match(match_line,line): print('匹配') # '^c.*3$' 代表以以c开头3结尾的,中间任何字符 match_line ='^c.*3$' if re.match(match_line,line): print('匹配')
import re line = '44cocct123' # match_line = '^c' match_line = '.*(c.*c).*' #这里括号代表只提取子串,.*代表可以以任何字符开头或者结尾 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:cc
上面这里为什么会出现cc的结果而不是 coc呢,实际上,这里的匹配是贪婪匹配,也就是
反向匹配的,也就是从尾到头来匹配的,那么如何使用呢,如下:
import re line = '44cocct123' # match_line = '^c' match_line = '.*?(c.*c).*' #这里问号代表从左边开始匹配 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:cocc
实际上,我要的输出coc,那么这个应该如何使用,如下,在括号里面加个问号
import re line = '44cocct123' # match_line = '^c' match_line = '.*?(c.*?c).*' #这里问号代表从左边开始匹配 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:coc
加号,+代表要最少出现一次
import re line = 'coedct123' # match_line = '^c' match_line = '.*(c.+e).*' #这里是贪婪模式,从左边开始匹配,但是以c开头,c结尾,中间的任意字符必须至少出现一次,比如仅仅是 #如果字符是 'cedct123',ce则不出出现 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:coe
大括号里面包含的数字 {2} ,最少出现两次
或者 {2,}:最少出现两次以上
或者 {2,5}:最少2次,最多5次
import re line = 'cweedct123' # match_line = '^c' match_line = '.*(c.{2}e).*' #这里的 {2}代表两个字符之间的字符必须出现2次 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:cwee
| 代表只要或的关系,例如 字符串 '(baby|baby22)',只要满足一边即可
import re line = 'baby is smail' # match_line = '^c' match_line = '(test|baby|xx)' #只要里面有包含baby的都提取出来
match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:baby
[],中括号里面的字符只要满足任意一个即可,也可以写区间,[abcd]可以写成[a-d]
另外需要注意的是 进入中括号的字符都代表字符本身,[.*] 这里已经不具备其他含义,
就是.*号本身了
import re line = 'baby is smail' match_line = '([abcd]aby is smail)' #这里的代表只要字符串中的开头只要是abcd中任意一个即可匹配 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:baby is smail ,如果match_line = '([apcd]aby is smail)',则不输出
import re line = '13766666666' match_line = '(1[35478][^a-z]{9})' #这里的代表1开头,第二个任意为35478中的一个,不等于a-z中的任何一个,出现9次 match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:13766666666
\ 反斜杠的用途 :
\s :小s的意思的就是中间为空格
\S: 如果是\S则不为空格
\w: 代表为任意字符,但是跟 .* 不一样,与中括号的 [a-zA-Z0-9_]的一样
\W 大的W的就是与小的 \w的作用相反
固定用法:[\u4E00-\u9FA5] 只提取汉字,
import re line = 'study by 南京大学' match_line = '.*?([\u4E00-\u9FA5]+大学)' match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:南京大学
\d:代表数字
import re line = 'xxx出生与2001年' match_line ='.*?(\d+)' # '.*(\d+4})' match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西 #输出:2001
小作业,匹配全部的
import re # line = 'xxx出生与2001年6月1日' # line = 'xxx出生与2001年6月' # line = 'xxx出生与2001-6-1' # line = 'xxx出生与2001-06-01' # line = 'xxx出生与2001-6' line = 'xxx出生与2001/6/1' match_line ='.*?出生与(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}[日]|[月/-]\d{1,2}|$|[月/-]$))' match_obj = re.match(match_line,line) if match_obj: print(match_obj.group(1)) # 括号里面的1代表取第一个括号里面东西