Python中使用正则处理文本

在Python中,有4个常见的正则处理文本的场景:校验文本内容;提取文本内容;替换文本内容;切割文本内容。

1、校验文本内容

Python中,正则处理相关的方法在re包中,可以使用re.match 或 re.search来校验文本。

import re
myre = re.compile(r'\A\d{4}-\d{2}-\d{2}\Z')
#\A开始匹配,\Z匹配结束
print(myre.match('2020-07-08') is not None)
print(myre.search('2020-07-08') is not None)

2、提取文本内容

Python中,使用re.findall()来提取文本内容。当有子组的时候,会返回子组的内容,没有子组时,返回整个正则匹配到的内容。

import re 
#没有子组时
myre = re.compile(r'\d{4}-\d{2}')
print(myre.findall('2020-07 2020-08'))
#有子组时
myre1 = re.compile(r'(\d{4})-(\d{2})')
print(myre1.findall('2020-07 2020-08'))
# ['2020-07', '2020-08']
# [('2020', '07'), ('2020', '08')]

#使用迭代器遍历匹配后内容
for match in myre1.finditer('2020-07 2020-08'):
     print('date: ', match[0]) # 整个正则匹配到的内容
     print('year: ', match[1]) # 第一个子组
     print('month:', match[2])
# date:  2020-07
# year:  2020
# month: 07
# date:  2020-08
# year:  2020
# month: 08

3、替换文本内容

Python中常用re.sub和re.subn方法进行文本替换,re.subn返回替换的次数。

import re
myre = re.compile(r'(\d{2})-(\d{2})-(\d{4})')
print(myre.sub(r'\3年\1月\2日', '06-20-2020 07-21-2020'))
#2020年06月20日 2020年07月21日
# 可以在替换中使用 \g<数字>,如果分组多于10个时避免歧义
print(myre.sub(r'\g<3>年\g<1>月\g<2>日', '06-20-2020 07-21-2020'))
#2020年06月20日 2020年07月21日
# 返回替换次数
print(myre.subn(r'\3年\1月\2日', '06-20-2020 07-21-2020'))
#('2020年06月20日 2020年07月21日', 2)

4、切割文本内容

Python中,对于空格分隔的字符串可以使用split()方法,split也可指定字符分隔。

mystr1 = "I am aojin"
mystr2 = "I-am-aojin"
#默认空格分隔
print(mystr1.split())
#['I', 'am', 'aojin']
#指定分隔符
print(mystr2.split('-'))
#['I', 'am', 'aojin']

re包中的split方法也可以进行字符串分隔。

import re
#通过标点符号切割
myre = re.compile(r'\W+')
print(myre.split("I, am! Ao; jin"))
# ['I', 'am', 'Ao', 'jin']
# 只切割一次
print(myre.split("I, am! Ao; jin", 1))
# ['I', 'am! Ao; jin']

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值