python3 re正则表达式(极速掌握)

python3 re正则表达式

常用的元字符
代码说明
.匹配除换行符(\n)以外的任意字符
^ 匹配字符串的开头
$匹配字符串的末尾
\w匹配字母或数字或下划线或汉字0-9、a-z、A-Z、_(下划线)、汉字和其他国家的语言符号
\W匹配非字母或数字或下划线或汉字,跟\w正好相反
\s匹配任意的空白符
\S匹配任意非空白符
\d匹配数字
\D匹配非数字
\b匹配单词的开始或结束
a| b匹配a或b
(re) 匹配括号内的表达式,也表示一个组
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re* 匹配0个或多个的表达式
re+匹配1个或多个的表达式
re? 重复零次或一次
re{n} 重复n次
re{n,} 重复n次或更多次
re{n,m} 重复n到m次
例子
代码说明
[Pp]ython匹配 "Python" 或 "python"
rub[ye]匹配 "ruby" 或 "rube"
[aeiou]匹配 "Python" 或 "python"
[0-9]匹配任何数字。类似于 [0123456789]
[a-z]匹配任何小写字母
[A-Z]匹配任何大写字母
[A-Z]匹配任何大写字母
[a-zA-Z0-9]匹配任何大写字母
[^0-9] 匹配除了数字外的字符
可选标志
代码说明
re.I使匹配对大小写不敏感
re.L做本地化识别(local-aware)匹配
re.M多行匹配,影响^ 和 $
re.S使用 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易理解
函数
re.match函数(匹配)
re.match(pattern, string, flags)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式

import re
print(re.match('abc', 'abc.vip123.com').span())  # 在起始位置匹配(0, 3)
print(re.match('com', 'abc.vip123.com').span())  # 不在起始位置匹配置匹配 None

re.search方法(查找)

re.search(pattern, string, flags)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式

import re
print(re.search('abc', 'abc.vip123.com').span())  # 在起始位置匹配(0, 3)
print(re.search('com', 'abc.vip123.com').span())  # 不在起始位置匹配置匹配(11, 14)

re.sub函数(检索和替换)

re.sub(pattern, repl, string, count, flags)
pattern : 匹配的正则表达式
repl : 替换后的字符串,也可为一个函数
string : 要被查找替换的原始字符串
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
flags : 编译时用的匹配模式,数字形式

import re
# 将匹配的数字乘于 2
def double(num):
    value = int(num.group('value'))
    return str(value * 2)
s = 'AAAaa7as8ach6ac66cas9m'
print(re.sub('(?P<value>\d+)', double, s))#AAAaa14as16ach12ac1212cas18m
s2="333-22-111"
# 移除非数字的内容
num = re.sub(r'\D', "", s2)
print (num)#33322111

re.findall函数(查找所有)

re.findall(pattern, string, flags)
pattern:匹配模式
string:待匹配的字符串
pos:可选参数,指定字符串的起始位置,默认为 0
endpos 可选参数,指定字符串的结束位置,默认为末尾

import re
result1 = re.findall(r'\d+','runoob 123 google 456')
pattern = re.compile(r'\d+')   # 查找数字
result2 = pattern.findall('runoob 123 google 456')
result3 = pattern.findall('run88oob123google456', 0, 10)
print(result1)#['123', '456']
print(result2)#['123', '456']
print(result3)#['88', '12']

re.split函数(字符串分割)

re.split(pattern, string, maxsplit, flags)
pattern:匹配的正则表达式
string:要匹配的字符串
maxsplit:分割次数,maxsplit=1 分割一次,默认为 0,不限制次数
flags:标志位

import re
str=re.split('\W+', ' runoob, runoob, runoob.', 1) 
print(str)#['', 'runoob, runoob, runoob.']

案例

import re
text=“啊实打实的报价明细5500元啊实打实的”
text1=re.search('报价明细.*元', text).group()
print(text1)#报价明细5500元
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值