\w 匹配字母数字及下划线
\W 匹配非字母数字下划线
\s 匹配任意空白字符,等价[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,等价[0-9]
\D 匹配任意非数字
\A 从字符串头开始匹配,匹配不上也不会向后匹配,以后不会用
\Z 从末字符串末尾开始匹配,匹配不上也不会向前匹配,以后不会用
\z 以后不会用
\G 以后不会用
\n 匹配一个换行符
\t 匹配一个制表符
^ 从字符串头开始匹配
$ 从末字符串末尾开始匹配
重复匹配
. 除了换行符外任意一个字符
re.findall('','',re.DOTALL)re.DOTALL可以匹配任意字符,包裹换行符
print(re.findall('s.*b','sb alex_sbbb12 xx_sbbb,wxx_sbbbbbb s b'))
? 代表左边那一个字符重复0次或1次
* 代表左边那一个字符出现0次或无穷次
+ 代表左边那一个字符出现1次或无穷次
{m,n} 代表左边那一个字符出现m次到n次
.* 代表匹配任意长度,任意的字符 贪婪匹配,无益的 a.*c 代表从第一个a到最后一个c
爬虫非常重要.*? 把贪婪 匹配变成非贪婪匹配 a.*?c 代表从第一个a到第一个c
# 分组
# print(re.findall('(s) b','sb alex_sbbb12 xx_sbbb,wxx_sbbbbbb s b'))
# () 在括号不影响正则表达式的,只留()内的内容
# [...] 匹配一个指定范围内的字符.这一个字符来自于括号内定义的,(可以放任意字符,一个中括号代表一个字符,这一个字符来自于中括号内定义的)
# 当-需要当作普通符号匹配时,只能放在[]的最左边或最右边
# [^...] ^在[]里用是取反的意思
# a|b 代表或者
# (?:)在括号的开头加个?:代表取匹配成功的所有内容,而不是仅仅()内的
re模块的其他方法
re.search('hello','hello world hello python').group()
#返回第一个匹配的字符串,结果封装为对象 span=(0,5)匹配的位置 match的值
re.match('hello','hello world hello python').group()#匹配行首,返回值与search相同
re.split('hello','hello world hello python',maxsplit=0)
re.compile('hello') #将正则表达式封装为一个正则对象,好处是可以重复使用这个表达式
re.sub('hello','gun','world hello Java')