Python re正则模块

问题描述:

对于比较复杂的字符串处理任务,需要依靠正则表达式。

使用流程:

首先需要导入 re 模块


import re

常用的元字符
符号含义
.匹配除 “\n” 和 “\r” 之外的任何单个字符。
^匹配字符串开始位置
$匹配字符串结束位置
*前面的元素重复0次,1次或多次
?前面的元素重复0次或1次
+前面的元素重复1次或多次
{n}前面的元素出现了n次
{n, }前面的元素至少出现n次
{n. m}前面的元素出现的次数介于n-m之间
( )进行分组,输出括号中的部分
常用的通用字符
符号含义
\s匹配空白字符
\w匹配任意字母/数字/下划线
\W匹配任意字母/数字/下划线以外的字符
\d匹配十进制数字
\D匹配十进制数字以外的值
[0-9]匹配一个0~9之间的数字
a-z匹配小写英文字母
A-Z匹配大写英文字母
常用的函数
search

search方法能够找出子串第一个匹配位置


import re

s = 'hello world. hello world.'

key_word = 'world'
# 找到后返回re.Match object
r = re.search(key_word, s)
# 返回一个元组包含匹配 (开始,结束) 的位置
r.span()


match

match从原字符串的开始位置匹配(search函数是从任意位置匹配)

finditer

匹配迭代器
返回所有匹配位置的迭代器

返回对象是 re.Match, 可以使用 span() 方法找到它的开始和结束位置


import re

s = 'hello world. hello world.'

key_word = 'world'

r = re.finditer(key_word, s)

for i in r:
    print(i.span())

findall

re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

re.I

re.I是方法的可选参数,表示忽略大小写。


s = "That"
pat = "t"

r = re.finditer(pat, s, re.I)
for i in r:
	print(i.span())

split

字符串中的split函数只能分割简单的情况

如果字符串的分隔符有 , ; \t |

words = re.split(r'[,\s;|]+', s)
sub

替换匹配到的字符串


content = "hello world, hello world"

 # 要替换的部分
pattern = re.compile(r'world')

m=pattern.sub("kitty", content)

compile

预编译方法,如果要用同一匹配模式进行多次匹配,可以使用compile预先编译串,可以提升运行效率

贪心捕获与非贪心捕获

(.*) 表示捕获任意多个字符,尽可能多的匹配字符,要找到最后一个匹配的,把中间部分返回,也被称为贪心捕获

(.*?)非贪心捕获,找到第一个匹配后返回,把中间部分返回,称为非贪心捕获

案例

匹配浮点数和整数


import re

s = 's2sss1.02sssss5s'

pattern = r'\d+\.?\d*'

r = re.findall(pattern, s)

匹配正整数

第一个数为大于1-9
第二个为0-9,可以存在或不存在


import re

s = [-16, 1.02, 5, 0, 127, a]

pattern = r"^[1-9]\d*$"

[i for i in s if re.match(pattern, str(i))]

正则表达式的测试网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值