- re模块简介
'''
python自1.5以后增加了re的模块,提供了正则表达式模式
'''
import re
#pip 包管理工具
'''
re.match函数
原型:match(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
string-要匹配的字符串
flags-标识位,用于控制正则表达式的匹配方式,值如下
re.I 忽略大小写
re.L 做本地化识别
re.M 多行匹配,影响^和$
re.s 是. 匹配包括换行符在内的所有字符
re.U 根据Unicode字符集解析字符,影响\w \W \b \B
re.X 使我们以更灵活的格式理解正则表达式
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回None
'''
#www.baidu.com
print(re.match("www", "www.baidu.com"))
print(re.match("www", "www.baidu.com").span())
print(re.match("www", "ww.baidu.com"))
print(re.match("www", "baidu.wwwcom"))
print(re.match("www", "Www.baidu.com"))
print(re.match("www", "Www.baidu.com", flags=re.I))
#扫描整个字符串,返回从起始位置成功的匹配
'''
re.search函数
原型:search(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
string-要匹配的字符串
flags-标识位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回第一个成功的匹配
'''
print(re.search("sunck", "good man is sunck!sunck nice"))
'''
re.findall函数
原型:findall(pattern, string, flags=0)
参数:pattern-匹配的正则表达式
string-要匹配的字符串
flags-标识位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回结果列表
'''
print(re.findall("sunck", "good man is sunck!sUnck nice",flags=re.I))
- 正则表达式的元字符
匹配单个字符与数字
import re
'''
. 匹配除换行符以外的任意字符
[0123456789] []是字符集和,表示匹配中括号中所包含的任意一个字符
[sunck] 匹配"s","u","n","c","k"中任意一个字符
[a-z] 匹配任意小写字母
[A-Z] 匹配任意大写字母
[0-9] 匹配任意数字
[0-9a-zA-Z] 匹配任意的数字和大小写字母
[0-9a-zA-Z_] 匹配任意的数字和大小写字母和下划线
[^sunck] 匹配除了sunck几个字母以外的所有字符中括号内^称为脱字符,
表示不匹配集合中的字符
[^0-9] 匹配所有的非数字字符
\d 匹配数字,效果同[0-9]
\D 匹配非数字字符,效果同[^0-9]
\w 匹配数字、字母和下划线,同[0-9a-zA-Z_]
\W 匹配非数字字母、字母和下划线,同[^0-9a-zA-Z_]
\s 匹配任意的空白符(空格,换行,回车,换页,制表)同[ \f\n\r\t]
\S 匹配任意的非空白符,同[^ \f\n\r\t]
'''
print(re.search(".","good good 6 study"))
print(re.search("[0123456789]","good good 9 study"))
锚字符(边界字符)
'''
^ 行首匹配,和在[]里的不是一个意思
$ 行尾匹配
\A 匹配字符串开始,它和^的区别是\A只匹配整个字符串的开头,即使在re.M
模式下也不会匹配别行的行首
\Z 匹配字符串结束,它和$的区别是\A只匹配整个字符串的结束,即使在re.M
模式下也不会匹配别行的行尾
\b 匹配一个单词的边界也就是指单词和空格间的位置,'er\b'可以匹配never,不能
匹配nerve
\B 匹配非单词边界
'''
print(re.search("^good$","good good study"))
print(re.findall("^good","good good study\ngood good study",re.M))
print(re.findall("\Agood","good good study\ngood good study",re.M))
print(re.findall("study$","good good study\ngood good study",re.M))
print(re.findall("study\Z","good good study\ngood good study",re.M))
print(re.search(r"er\b","never"))
print(re.search(r"er\b","nerve"))
print(re.search(r"er\B","never"))
print(re.search(r"er\B","nerve"))
匹配多个字符
'''
以下x,y,z为假设的普通字符,m,n是非负整数,不是正则表达式的元字符
(xyz) 匹配小括号内的xyz(作为一个整体去匹配)
x? 匹配0或1个x
x* 匹配0或任意多个x(.* 表示匹配0个或任意多个字符(换行符除外))
x+ 匹配至少一个x
x{n} 匹配确定的n个x(n是一个非负整数)
x{n,} 匹配至少n个x
x{n,m} 匹配至少n个最多m个x
x|y |表示或,匹配x或y
'''
print(re.findall(r"(good)","good good study"))
print(re.findall(r"o?","good good study"))#非贪婪匹配
print(re.findall(r"o*","good good ostudy"))#贪婪匹配(尽可能多的匹配)
print(re.findall(r"o+","good good ostudy"))
print(re.findall(r"o{3}","goood good study"))
print(re.findall(r"o{2,}","goood good ostudy"))
print(re.findall(r"((g|u)ood)","goood good ostudy"))
####提取good......study
str = "good god study!good hard study"
print(re.findall(r"good.*?study",str))
#特殊
'''
*? +? ?? 最小匹配 通常都是尽可能多的匹配,可以使用这种方式解决贪婪匹配
(?:x) 类似(xyz),但不表示一个组
'''
#注释: /* part1 */ /* part2 */
print(re.findall(r"//*.*?/*/",r"/* part1 */ /* part2 */"))