正则表达式-学习小结

正则表达式-学习小结

3个月没看之前的代码,回过头来一瞅,这还是自己写的代码吗?一脸懵,尤其是正则表达式这种相对较为晦涩的语言,记录一下曾经使用过的那些正则表达式。当时学习正则表达是主要是要提取一些非结构化文本中的信息,期望将其能够结构化,即提取需求字段。
正则表达式的表达式全集以及常用正则表达式可参照该链接(目前见过最简洁的正则表达式全集):http://tool.oschina.net/uploads/apidocs/jquery/regexp.html 对照该链接看之前写过的正则表达式就相对一目了然。

1. 导入re库

import re

2. re.search(reg, text)

根据匹配模式查找相应的字符串

text = "当山峰没有棱角的时候 当河水不再流 当时间停住日夜不分 当天地万物化为虚有"

# 匹配text中的“当”字
reg = "当(.*)"
re_search = re.search(reg, text)
# 查找结果
res = re_search.group()
# 结果为:当山峰没有棱角的时候 当河水不再流 当时间停住日夜不分 当天地万物化为虚有

# 匹配text中的“当”字,遇到下一个“当”字停止
reg = "当([^当]*)"
g_search = re.search(reg, text).group()
print(g_search)
# 结果为:当山峰没有棱角的时候

3. re.split() / re.sub() / re.finditer()

text_ = re.split(" ", text)
# 结果为:['当山峰没有棱角的时候', '当河水不再流', '当时间停住日夜不分', '当天地万物化为虚有']

# 匹配text中的所有“当”字,并且按照list存储信息
reg = "当([^当]*)"
# 将text中的空格替换成空字符串
text = re.sub(" ", "", text)
f_search = re.finditer(reg, text)
res = []
for dang_ in f_search:
    res.append(dang_.group())
print(res)
# 结果为:['当山峰没有棱角的时候', '当河水不再流', '当时间停住日夜不分', '当天地万物化为虚有']

4.正/反向肯定预查

正向肯定预查:表示沿着从左到右的顺序进行匹配
反向肯定预查:表示沿着从右到左的顺序进行匹配

# 非获取匹配
reg = "(当)(?=山峰)([^当]*)"   # 正向肯定预查   
reg_1 = "(当)(?:山峰)([^当]*)"   

g_search = re.search(reg, text).group()  
# 结果为: 当山峰没有棱角的时候
 
# 使用group获取匹配的group的时候从1开始计数,0或者不填写都表示匹配的所有字符串
g_search = re.search(reg, text).group(2)  
# 结果为: 山峰没有棱角的时候

g_search = re.search(reg_1, text).group(2)  
# 结果为: 没有棱角的时候 

reg = "(?<=山峰)([^当]*)"     # 反向肯定预查
g_search = re.search(reg, text).group()  
# 结果为: 没有棱角的时候 

reg = "(当)(?!山峰)(.*)"      # 正向否定预查
g_search = re.search(reg, text).group()  
# 结果为: 当河水不再流当时间停住日夜不分当天地万物化为虚有
5. text.find() / text.rfind()
# 获取某个字符在字符串中第一次出现的索引值
find_c = "不"
print(text.find(find_c))   # 13

# 反向获取某个字符第一次出现的索引值
print(text.rfind(find_c))  # 23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值