re模块简介及元字符和转义字符

import re

'''
.代表通配符,除了\n不能匹配外,其它全部都能匹配,一个点代表一个字符
^代表字符串开头进行匹配,只能放在最前面
$代表字符串结尾进行匹配,只能放在最后面
*代表0到无穷次
+代表1次到无穷次
?代表0次到1次
{}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次
*****注意:前面的*,+,?等都是贪婪匹配,也就是尽可能多的匹配;后面加?号使其变成惰性匹配,比如*?匹配0个,+?匹配1个*****
[]代表字符集,或的作用;
'''

# .代表通配符,除了\n不能匹配外,其它全部都能匹配,一个点代表一个字符
# print(re.findall('a..x', 'fialexskdlfjaghx'))

# ^代表字符串开头进行匹配,只能放在最前面
# print(re.findall('^b.*b$', 'bslkafdsallkb'))
# print(re.findall('^abc', 'abcsss'))

# $代表字符串结尾进行匹配,只能放在最后面
# print(re.findall('.+b$', 'asdfb'))

# *代表0到无穷次
# print(re.findall('abc*', 'abcccccbbabc'))
# print(re.findall('a*', 'abakjalaaoaaia')) # 结果为['a', '', 'a', '', '', 'a', '', 'aa', '', 'aa', '', 'a', ''],*代表0到无穷次,那么不是a也代表匹配上了,因为0它也取,只不过为空
# print(re.findall('d*$', 'dddlslslsdddd'))
# print(re.findall('^d*', 'dddlslslsdddd'))

# +代表1次到无穷次
# print(re.findall('alex*', 'asddsaale')) # *代表0到无穷次,那么x可以没有,所以ale可以取出来
# print(re.findall('alex+', 'asddsaale')) # +代表1到无穷次,那么x最少要有一个,所以alex取不出来

# ?代表0次到1次
# print(re.findall('alex?', 'asddsafale'))
# print(re.findall('alex?', 'asddsalexxxxxxf'))

# {}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次;*****大括号里的逗号不能有空格*****
# print(re.findall('alex{0,}', 'ahskalefdsfd'))
# print(re.findall('alex{1,}', 'ahskalexxxfdsfd'))
# print(re.findall('alex{2,4}', 'alexxfkdjalexxxfkdialexjaleiialexxxx'))
# print(re.findall('alex{3}', 'alexxxxx'))

# 惰性匹配--->*?匹配0个,+?匹配一个
# print(re.findall('alex*?', 'ale'))
# print(re.findall('alex*?', 'alex'))
# print(re.findall('alex*?', 'alexxxx'))
# print(re.findall('alex+?', 'ale'))
# print(re.findall('alex+?', 'alex'))
# print(re.findall('alex+?', 'alexxxx'))

# []代表字符集,或的作用
# print(re.findall('www[baidu,]', 'wwwbwwwawwwiwwwdwwwuwww,')) # 里面的每一个字符都当作一次匹配,包括逗号:['wwwb', 'wwwa', 'wwwi', 'wwwd', 'wwwu', 'www,']
# print(re.findall('[abc.*+]', 'aa.bs*cs+')) # ['a', 'a', '.', 'b', '*', 'c', '+']

# 在字符集里有功能的符号:- ^ \
# print(re.findall('[a-z]', '123abc456qweRTY')) # 代表小写字母a-z
# print(re.findall('[A-Z]', '123ABC456QWErty')) # 代表大写字母A-Z
# print(re.findall('[0-9]', '001122q3w4e5A6S7D89')) # 代表数字0-9
# print(re.findall('q[^a-z]', 'qaqbqcqdqeqfq0q1qAq.q*q!q')) # 非,除小写字母a-z以外的都匹配
# *****print(re.findall('\([^()]*\)', '12+(34*6+2-5*(2-1))')) # 计算器作业---提取括号里的表达式---没有理解透到底怎么回事,需重新复习理解*****
'''
元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。下划线也可以匹配到
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格,&,#等
'''
# print(re.findall('\d+', '1a2b34c56d78f90g'))
# print(re.findall('\D+', '1a2b34c56d78f90gw'))
# print(re.findall('\s+', '\tabc\n123'))
# print(re.findall('\S+', '\tabc\n123'))
# print(re.findall('\w+', '12,ab.00*cd?你好@'))
# print(re.findall('\W+', '12,ab.00*cd?你好@'))
# print(re.findall('www\.baidu\.com', 'www.baidu.com')) # 如果不加转义符,后面的除了\n不能匹配外,其它都能匹配到

print(re.findall('I', 'I am LIST')) # ['I', 'I']
print(re.findall('^I', 'I am LIST')) # ['I']
print(re.findall('^I', 'hello I am LIST')) # []
print(re.findall('I\b', 'hello I am LIST')) # []
print(re.findall(r'I\b', 'hello I am LIST')) # ['I'],r=rawstring,原生字符串,不做任何转义
print(re.findall('I\\b', 'hello I am LIST')) # ['I']

print(re.findall('c\\\\l', 'abc\le')) # \l<--->re模块\\l<--->python解释器\\\\l;结果['c\\l'],其实是一个\,但是python又一次转义多加了一个\
print(re.findall(r'c\\l', 'abc\le')) # \l<--->re模块\\l<--->python解释器\\l

上一篇:python2使用re匹配报错:TraitError


下一篇:爬虫实战之爬取古诗文网站 (详细)