python正则表达式的实现
1.正则表达式的基本概念
正则表达式是一个特殊的字符序列,它能帮助我们方便的检查一个字符串是否与某种模式匹配。尤其是对于大段的文本来说,正则表达式能够快速提取我们想要的信息。
re 模块使 Python 语言拥有全部的正则表达式功能, re 模块提供了一些函数,使用一个模式字符串做为它们的第一个参数,用以匹配出某种模式。
本文的实例将通过re模块来在python实现正则表达式,文末会逐渐增加一些re模块的讲解,平时要写作业,可能更新较慢。想要了解re模块的更多信息可以在Python中运行help(re)
2.数据集的展示
首先我们先展示一下数据集(model.txt),数据集中包含booster[ ],以及每个booster包含的leaf。从图片中可以看出数据集的结构杂乱无章,无法快速获得自己想要的数据。
3.利用正则表达式希望实现的操作
通过正则表达式我们希望实现
1、根据leaf.txt定位到model.txt中每个booster的结点,并获取leaf的值,如booster[0]中选择结点166的leaf值为-0.20339
2、把获取到的100个节点的leaf值存储到一个txt文件中
ps:leaf.txt 为一百个随机数字
4.代码实现
以下是代码实现,从每个booster[ ]中将所需要的结点提取出来
import re
#读取文件
f=open('d:\model.txt','r')
g=open('d:\leaf.txt','r')
lines1=f.read()
lines2=g.read()
#准备数据
line_2=lines2.split(' ')
out_file = open('d:\out_file.txt','w')
list1= lines1.split('booster')
for i in line_2:
if i=='':
line_2.remove(i)
else:
column2=i.replace('\n','')
line_2[line_2.index(i)]=column2
#通过正则表达式进行匹配
y=[]
for j in range(0,100):
leaf=line_2[j]+':leaf=(.+)'
out=re.search(leaf,list1[j+1])
out_file.write('booster[{}]:'.format(j)+'%s\n'%str(out.group()))#将结果输出
y.append(out.group())
f.close()
g.close()
out_file.close()
5.输出结果
re模块的讲解
1.re通配符
正则表达式中使用点号‘ . ’匹配任何字符(换行符除外),例如:‘.ython’,可以匹配字符串‘python’、’jython’、‘+ython’或者‘ ython’(第一个字母是空格),但是不会配’cpython’或者‘ython’这样的空符串,即点号只能匹配一个字母,而不是多个或者零个。
假设需要匹配字符串‘baidu.com’,直接用‘baidu.com’模式不仅会匹配‘baidu.com’,也会匹配‘baiduzcom’。为了让特殊字符表现得像普通字符一样,需要对它进行转义(escape),可以在它前面加上反斜线‘baidu\.com’
2.re字符集
使用中括号括住字符串来创建字符集。字符集可以匹配它所包括的任意字符,所以‘[pj]ython’能够匹配‘python’和‘jython’。
可以使用范围,例如‘[a-z]’能够匹配a到z的任意一个字符,还可以通过一个接一个的方式将范围联合起来使用,例如‘[a-zA-Z0-9]’,能够匹配任意大小写字母和数字
Ps:字符集只能匹配一个这样的字符