正则表达式的功能:字符串的模糊匹配查询
import re
元字符
. ---->匹配除换行符意外的任意字符
^ ---->匹配行首位置
$ ---->匹配行尾位置
关于重复的元字符
* ---->(0,无穷)
+ ---->(1,无穷)
? ---->(0,1)
{} --->指定次数
转义符
1、反斜杠后边跟元字符去除特殊功能,比如.
2、反斜杠后边跟普通字符实现特殊功能,比如d
d 匹配任何十进制数; 它相当于类 [0-9]。
D 匹配任何非数字字符; 它相当于类 [^0-9]。
s 匹配任何空白字符; 它相当于类 [
fv]。
S 匹配任何非空白字符; 它相当于类 [^
fv]。
w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_],也可以匹配汉字。
W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
的应用
ret=re.findall(r'I','I am LIST')
print(ret)#['I']
正则应用
res = '\' #是转义符,前面再加个
print(res) #
res = '\n'
print(res) #
ret=re.findall("(李w{1,2})","李杰,李刚,王超,占山,李连英") # 匹配出所有符合条件的元素
print(ret)
# ret=re.findall('cl','abcle')
# print(ret)#报错
# ret=re.findall('c\l','abcle')
# print(ret)#报错
ret=re.findall('c\\l','abcle')
print(ret)#['c\l']
ret=re.findall(r'c\l','abcle')
print(ret)#['c\l']
# 是特殊符号所以,'abce'前面需要加r
ret=re.findall(r'c\b',r'abce')
print(ret)#['c\b']
分组 ( )
# 普通分组
m = re.findall(r'(ad)+', 'add')
print(m)
# 命名分组
import re
# ret = re.search(r'-blog-aticles-(20[01]d)-(d+)','-blog-aticles-2015-04')
ret = re.search(r'-blog-aticles-(?P<year>20[01]d)-(?P<month>d+)','-blog-aticles-2015-04')
print(ret.group())
print(ret.group('year'))
print(ret.group('month'))
字符集[]
#[abc] 匹配a或b或c
ret = re.findall('a[bc]d', 'acd')
print(ret) # ['acd']
ret = re.findall('[a-z]', 'acd')
print(ret) # ['a', 'c', 'd']
ret = re.findall('[.*+]', 'a.cd+')
print(ret) # ['.', '+']
在字符集里有功能的符号: - ^
ret = re.findall('[1-9]', '45dha3')
print(ret) # ['4', '5', '3']
ret = re.findall('[^ab]', '45bdha3') # ^ 非字符集里面所有符号
print(ret) # ['4', '5', 'd', 'h', '3'] ret = re.findall('[d]', '45bdha3') print(ret) # ['4', '5', '3']
re模块下的常用方法
import re
ret = re.findall('a', 'alvin yuan') # 返回所有满足匹配条件的结果,放在列表里
print(ret)
ret = re.search('a', 'alvin yuan').group()
print(ret)
print(type(ret))
# 函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
ret = re.match('a', 'abc').group() # 同search,不过尽在字符串开始处进行匹配
print(ret)
findall的优先级查询
import re
ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com') # ?:取消组优先
print(ret) # ['www.oldboy.com']