Python3 Re正则表达式

对正则表达式的运用总是不熟练, 每次要写正则的时候,总是傻傻分不清 * . ?+()区别了。

这次特意系统学习,并做个笔记吧

一、正则表达式的常用操作符 

操作符说明栗子
.表示任意单个字符 
[ ]字符集,对单个字符给出取值范围[abc]: 表示a或b或c;   [a-z]: 表示a到z
[^ ]非字符集,对单个字符给出排除范围[^abc]: 表示非a或b或c单的单个字符
*表示*号前一个字符0次或无限次扩展(最小0次, 最大无限次)abc*: 表示ab、abc、abcc、abccc
+表示+号的前一个字符1次或无限次扩展(最小至少1次, 最大无限次)abc+: 表示abc、abcc、abccc、abcccc
表示?前一个字符可以是0次或1次扩展(只能是0次 或 最多1次)abc?: 表示ab、abc
|左右任意表达式1个abc|def: 表示 abc 或 def
{m}扩展前一个字符m次abc{2}:  表示abcc
{m, n}扩展前一个字符m次到n次abc{1, 3}: 表示abc 、abcc、 abccc
^匹配字符串开头 
$匹配字符串结尾 
()分组标记, 多组时内部只能用|操作符(abc)表示abc; (abc|efg): 表示abc或efg
\w单词字符,等价[a-zA-Z0-9] 
\W用于匹配所有与\w不匹配的字符 
\d数字, 等价于[0-9] 
\s空格 

\S

非空格 
[\u4e00-\u9fa5]匹配中文字符 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、Row string类型

如:正则表达式  ^\d+$, 用row string类型表示,为re = r'^\d+$'; 但是如果用string类型表示,需要对\进行转义,为re = r'^\\d+$';

由此可见,当正则表达式中包含转义符时,建议使用row string类型表示更方便。

三、Re库6个主要功能函数

re.search() 、re.match()、re.findall()、re.split()、re.finditer()、re.sub()

import re

# search 可以匹配到, 结果:111901 (注意:只会返回一个匹配结果,如果希望返回所有匹配结果, 需要使用finditer 或 findall)
search = re.search(r'[1-9]\d{5}', 'BAT 111901 IUC333777')
if search:
    print(search.group(0)) 

# match
# match = re.match(r'[1-9]\d{5}', 'BAT 111901') 从头开始匹配,所以匹配不到
# 可以匹配到了, 结果:111901
match = re.match(r'[1-9]\d{5}', '111901 BAT')
if match:
    print(search.group(0))
else:
    print("匹配不到")


# findall  结果:['111901', '888999']
list = re.findall(r'[1-9]\d{5}', '111901 BAT 888999')
if list:
    print(list)
else:
    print("匹配不到")

# split  结果:['', ' BAT ', '']
s = re.split(r'[1-9]\d{5}', '111901 BAT 888999')
if s:
    print(s)
else:
    print("匹配不到")

# finditer: 返回的是迭代类型, 结果111901、888999
for fi in re.finditer(r'[1-9]\d{5}', '111901 BAT 888999'):
    if fi:
        print(fi.group(0))

# sub 满足正则条件的部分,都被给定的内容替换. 结果:啊哈 BAT 啊哈
sb = re.sub(r'[1-9]\d{5}', '啊哈', '111901 BAT 888999')
print(sb)

以上这些函数, 还可以先通过re.compile(pattern) 对正则表达式先编译, 然后使用编译后的正则对象调用这些方法,这种方式因为是一次编译,多次使用, 效率更高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值