Python re模块相关用法

前言

这些得先知道:

.       点可代表一切非换行字符
\       起转义作用
[...]   指代方括号中的任意字符
\d      指代数字0-9
\D      指代非数字
\s      指代一切空格,包括tab制表符、空格、换行等
\S      指代非空格
\w      指代大小写字母、数字和下划线
\W      指代非大小写字母、数字和下划线
*       匹配前面字符 >=0+       匹配前面字符1次及以上
?       匹配前面字符0次或1{m}     匹配m次
{m,n}   匹配m到n次
{m,}    至少匹配m次

一、re.compile()是用来优化正则的,它将正则表达式转化为对象,可以多次调用这个对象。往往配合其他函数使用,单独使用没意义。

# 参数:pattern,flags
# pattern: 一个字符串形式的正则表达式。
# flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为。
"""
1).re.I  (IGNORECASE): 忽略大小写
2).re.M  (MULTILINE): 多行模式,改变'^'和'$'的行为
3).re.S  (DOTALL): 点任意匹配模式,改变'.'的行为
4).re.L  (LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
5).re.U  (UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
6).re.X  (VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
"""
reg_0 = re.compile("[\d]")  # 同:reg_0 = re.compile("\d")
reg_1 = re.compile("[abc]")  # reg_1 = re.compile("abc")  不加[]是错误的写法。
reg_2 = re.compile("[abc]", re.I)
reg_3 = re.compile(r"""a 
                \d * #小数部分""", re.X)		# 避免一行写不下,""""""可以实现换行哟。

二、re.sub() 实现比普通字符串的replace更加强大的“替换”功能。

# 参数:pattern, repl, string, count=0, flags=0
# pattern,表示正则中的模式字符串。
# repl,replace的意思,即pattern将被处理成的结果。
# string,表示被处理的字符串。
# count,表示是要替换的最大次数,必须是非负整数,该参数默认为0,即所有的匹配都会被替换。
# flags,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)  # 输出:abc、abc、ABC,.!~
result1 = re.sub(reg_1, "", str_1)  # 输出:123、456、A789BC,.!~
result2 = re.sub(reg_2, "", str_1)  # 输出:123、456、789,.!~
result2_ = re.sub(reg_2, "", str_1, count=2)  # 输出:123c、a456bc、A789BC,.!~
result3 = re.sub(reg_3, "", str_1)  # 输出:bc、bc、A789BC,.!~
print(result0)
print(result1)
print(result2)
print(result2_)
print(result3)

再举一些例子:

reg_0 = re.compile("\d")  # 用"",可以理解为.replace()
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)
print(result0)  # abc、abc、ABC,.!~

reg_0 = re.compile("\dbc")  # 同上
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)
print(result0)  # a12、a45、A789BC,.!~

reg_0 = re.compile("[\dbc]")  # 注意,这里加了[]。
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)
print(result0)  # a、a、ABC,.!~

# 多字符替换,用‘|’隔开。
reg_0 = re.compile("\d|bc")
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)
print(result0)  # a、a、ABC,.!~

# 多字符替换,用‘|’隔开。
reg_0 = re.compile("[\d|、]")
str_1 = "a123bc、a456bc、A789BC,.!~"
result0 = re.sub(reg_0, "", str_1)
print(result0)  # abcabcABC,.!~

三、re.split() 实现比普通字符串的split更加强大的“切分”功能。

# 参数:pattern, string, maxsplit=0, flags=0
# pattern,表示正则中的模式字符串。
# string,表示被处理的字符串。
# maxsplit,最多切分次数,默认为0,表示全部切开。
# flags,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。
str_1 = "a123bc、a456bc、A789BC,.!~"
reg_0 = re.compile("([、])")  # 保留分割符号‘、’。
reg_1 = re.compile("(?:[、])")  # 不保留分割符号‘、’。
result0 = re.split(reg_0, str_1)  # 输出:['a123bc', '、', 'a456bc', '、', 'A789BC,.!~']
result1 = re.split(reg_1, str_1)  # 输出:['a123bc', 'a456bc', 'A789BC,.!~']
print(result0)
print(result1)

# 多字符切分,用‘|’分开。
a = 'abc,123;αβγ。'
result1 = re.split(",|;|。", a)		# ['abc', '123', 'αβγ', '']
result2 = re.split("c,1|3;α|。", a)		# ['ab', '2', 'βγ', '']

四、re.findall()

a = 'abc123ABC(123)'
reg = re.compile('123')
result = re.findall(reg, a)
print(result)  # ['123', '123']

a = 'abc123ABC(123)'
reg = re.compile('123|abc')
result = re.findall(reg, a)
print(result)  # ['abc', '123', '123']

a = 'abc123ABC(123)'
reg = re.compile('[123]')
result = re.findall(reg, a)
print(result)  # ['1', '2', '3', '1', '2', '3']

# 匹配.*前后字符间的所有内容,包括符号本身;如果加上?,是非贪婪匹配,不加是贪婪匹配.
# 注意:中文括号不需要转义,但是英文小括号(左右)、中括号(左)、大括号(左)需要转义.
a = 'abc[123]A(BC(123)789)'
reg = re.compile('\(.*?\)|\[.*?]')  # 最小匹配
result = re.findall(reg, a)
print(result)  # ['[123]', '(BC(123)']

a = 'abc[123]A(BC(123)789)'
reg = re.compile('\(.*\)|\[.*?]')  # 贪婪匹配
result = re.findall(reg, a)
print(result)  # ['[123]', '(BC(123)789)']
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值