python regex应用

应用

1.返回匹配结果 findall&search

1)当有分组时,只将匹配到的字符串里,组的部分放到列表里返回,相当于groups()方法

1.findall
返回所有匹配结果

import re
pattern = re.compile(r'\d+')
pattern.findall("a12b56c54d89") # ['12', '56', '54', '89']


pattern = re.compile(r'\d*([0-9])')
pattern.findall("a124b567c54d892")  # ['4', '7', '4', '2'] 只返回了组内的匹配结果

pattern = re.compile(r'\d*([0-9])([0-9])')
pattern.findall("a124b567c54d892")  # [('2', '4'), ('6', '7'), ('5', '4'), ('9', '2')] 返回两组组内的匹配结果

2.search返回第一个匹配的结果

3.match从头开始匹配,一般不用再正则表达式用可以用^来限定

切分字符串 split

将字符串按照数字进行切分,普通的split函数只能指定具体某个数字

pattern = re.compile(r'[0-9]')
pattern.split("abc1efg2hij3klm")

替换匹配结果 sub

pattern = re.compile(r'\d+')
pattern.sub('000', '123abc456def') # 000abc000def 将所有的数字替换为0

pattern = re.compile(r'\d*(\d)') # 先匹配所有数字
pattern.sub(r'\1','123abc456def') # '3abc6def' 保留数字的个位数,用组内值`\1`代替所有的匹配结果


def func(m):
    return str(int(m.group())*2) # m既match匹配对象
pattern = re.compile(r'\d+')
pattern.sub(func,'123abc456def') # 利用m匹配对象,将匹配到的值翻倍

API

1.便捷方法(不编译方法)

不编译方法编译方法描述
re.search(pattern, string, flags=0)pattern.search(string[, pos[, endpos]])从指定的pos开始搜索到endpos结束,查找第一个能匹配上pattern的部分,并返回相应的匹配对象。 如果字符串中没有位置与模式匹配,则返回None;
re.match(pattern, string, flags=0)Pattern.match(string[, pos[, endpos]])这个函数和search差不多,但是,规定一定要从起始位置就得匹配上,否则就不算匹配成功。
re.fullmatch(pattern, string, flags=0)pattern.fullmatch(string[, pos[, endpos]])如果整个字符串匹配此正则表达式,则返回相应的匹配对象。 如果字符串与模式不匹配,则返回None;
re.split(pattern, string, maxsplit=0, flags=0)pattern.split(string, maxsplit=0)根据表达式规则分拆字符串,返回一个list。
re.findall(pattern, string, flags=0)pattern.findall(string[, pos[, endpos]])返回字符串中模式的所有非重叠匹配项,作为字符串列表。
re.finditer(pattern, string, flags=0)pattern.finditer(string[, pos[, endpos]])返回一个迭代器
re.sub(pattern, repl, string, count=0, flags=0)pattern.sub(repl, string, count=0)先通过正则表达式规则找到string中符合规则的部分,然后替换成repl
re.subn(pattern, repl, string, count=0, flags=0)pattern.subn(repl, string, count=0)不仅返回一个和上面函数一样的字符串,还多返回了一个数字,代表了总共替换的次数

参考|
https://www.jianshu.com/p/147fab022566

实例

条件替换,只去掉数字后面的x

import re
text = "100x text"
re.sub(r'(\d+)[xX]', r'\1', text) # 这个是用了分组的思想,把100x,替换成了100,\1是分组的第一个分组
re.sub('(?<=\d)[xX]', '', s)  # 这个是利用了分组的特殊构建

参考文献:
http://www.runoob.com/python/python-reg-expressions.html
https://www.cnblogs.com/yyyg/p/5498803.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值