python3 正则表达式re模块

正则表达式的功能:字符串的模糊匹配查询
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']
原文地址:https://www.cnblogs.com/lucaq/p/7081965.html