正则表达式#
re 模块
- re.match(pattern,string[,flag])
match方法 从首字母开始匹配,如果包含pattern字符串,则匹配成功,返回match对象,失败则返回None.
【注】只从起始位置开始匹配 ,flag表示可选项
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
运行结果:(0,3) - re.search(pattern,string[,flag])
search方法不一定从起始位置开始匹配
【注】如果存在多个匹配对象,只返回第一个 - re.findall(pattern,string[,flag])
返回所有匹配到的pattern,返回形式为数组 - re.sub(pattern,repl,string) #做替换,删除
- pattern = re.compile(pattern_str) # 返回一个正则表达式对象
res = pattern.search/match/fintall() #这是另一种写法
正则表达式模式
- 原子
:换行符
eg:string ='''aiwejoigjweigjio
wiegiheiug'''
pat=' '
re.search(pat,string)
结果:匹配到
w:匹配任意字母数字下划线 (非特殊字符)
d:匹配任意数字
s:匹配空格
W:匹配除字母数字下划线外的任意字符
D:匹配除数字以外的任意字符
S:匹配除空格外的任意字符 - 原子表
eg:pat='pyth[jsz]n'
string='aiweoijgoiepythznaoweio'
结果:匹配到pythzn - 元字符:正则表达式中具有特殊含义的字符,比如重复N次前面的字符
.:匹配任意的字符; ^:匹配字符串的开始位置; $:匹配字符串中结束的位置; :匹配零次一次或者多次前面的原子; ?:匹配0次或1次前面的原子; +:匹配一次或多次前面的原子
eg:pat='s' string1='aowieigs' string2='awoegoss' string3='aiweogjsssssss' 则三个字符串均能匹配到依次为:s,ss,sssssss,若pat='s+'则只能匹配string2,string3,如pat='s?' 则只能匹配string1,string2
{n}:前面的原子恰好出现n次; {n,}:至少出现n次; {m,n}:出现至少m次,至多n次; |:模式选择符 eg:t|s:表示t或者s - 模式修正符:不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现匹配结果的调整
- 贪婪模式和懒惰模式
eg: pat1='p.y' pat2='p.?y' string='pyaiowyiwe'
res:pat1匹配到paiyaiowy pat2匹配到py
6.匹配网址实例:
pat1='[a-zA-Z]+://[^s]*[.com|.cn]' string='http://www.baidu.com' 【注】:[^s]是表示匹配非空格的字符,当^放入到[]里面时,表示‘非’的意思。
更新用法:(?:pattern)? :表示这个括号里面的pattern字符串可以匹配0次或1次。