首页 > 代码库 > python3 正则表达式re模块

python3 正则表达式re模块

正则表达式的功能:字符串的模糊匹配查询
import re

元字符
. ---->匹配除换行符意外的任意字符
^ ---->匹配行首位置
$ ---->匹配行尾位置

关于重复的元字符
* ---->(0,无穷)
+ ---->(1,无穷)
? ---->(0,1)
{} --->指定次数


转义符 \
1、反斜杠后边跟元字符去除特殊功能,比如\.
2、反斜杠后边跟普通字符实现特殊功能,比如\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  匹配一个特殊字符边界,比如空格 ,&,#等

\b 的应用
ret=re.findall(rI\b,I am LIST)
print(ret)#[‘I‘]

正则应用
res = \\  #\是转义符,前面再加个\
print(res)  #\

res = \\n
print(res) #\n


ret=re.findall("(李\w{1,2})","李杰,李刚,王超,占山,李连英")  # 匹配出所有符合条件的元素
print(ret)
# ret=re.findall(‘c\l‘,‘abc\le‘)
# print(ret)#报错

# ret=re.findall(‘c\\l‘,‘abc\le‘)
# print(ret)#报错

ret=re.findall(c\\\\l,abc\le)
print(ret)#[‘c\\l‘]

ret=re.findall(rc\\l,abc\le)
print(ret)#[‘c\\l‘]


# \b是特殊符号所以,‘abc\be‘前面需要加r
ret=re.findall(rc\\b,rabc\be)
print(ret)#[‘c\\b‘]

分组 ()
m = re.findall(r(ad)+, add)
print(m)

字符集[]
#[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)

 .search分段

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))

 

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‘]

 

python3 正则表达式re模块