python基础_re使用

python基础_re使用

##以一个带文件操作的例子说明
目标:打开一个文件,提取()中的内容,保存在一个新的文件里

涉及到的一些操作:

序号 操作
1 文件操作codecs.open
2 正则表达式re模块的使用

上代码:

import linecache
import re
import codecs

filename = "./lolStatistics.txt"


def fun1(name):
    filename = name
    #theFile = open(filename, "r", encoding="utf-8")
    lineNum=0
    doneLine=[]
    NewStatics = codecs.open('NewStatics.txt', 'w+', encoding='utf-8')
    while lineNum <59:
        eachLine=linecache.getline(r'./lolStatistics.txt', lineNum + 1)
        myLine=re.search('\((.+?)\)',eachLine).group(1)+"\n"
        lineNum+=1
        print(myLine)
        doneLine.append(myLine)
        wholePage = str(doneLine)
        NewStatics.writelines(myLine)
    NewStatics.close()
if __name__ == '__main__':
	fun1(filename )
说明
背景是处理一些直接从LOL官网上复制粘贴到本地的英雄数据,处理后就是()中的内容了:例:总击杀(场均)\n==》场均
因为是复制粘贴的格式是gbk读写操作时候需要转个码, encoding=‘utf-8’
用codecs.open(‘NewStatics.txt’, ‘w+’, encoding=‘utf-8’)打开文件
linecache.getline(r’./lolStatistics.txt’, lineNum + 1)逐行读取文件,59是因为原来的表格行数已经知道了linecache.getline很便捷
myLine=re.search(’((.+?))’,eachLine).group(1)+"\n"匹配出()中的内容,(.+?)是一种很便捷的匹配一串文本的正则表达式,在它的两端加上头尾的匹配内容就行

二、关于re.search().group()的返回

re.search使用起来比较方便,关于group()的返回可以看下面这个例子:

a="总击杀(场均)\n"
testList=re.search(r"\((.+?)\)",a).group()
print("不带参数返回:",testList)
testList = re.search(r"\((.+?)\)", a).group(1)
print("带参数1返回:",testList)

run的结果

不带参数: (场均)
带1 场均
re.search(XXXXX,XXXXX).group()返回内容中包括re.search函数中第一个参数(.+?)头尾匹配的内容 ,这里就是两头的 ( )
re.search(XXXXX,XXXXX).group(1)返回内容中仅是(.+?)头尾匹配的内容 ,这里就是场均

猜你喜欢

转载自blog.csdn.net/qq_41762975/article/details/84971086
今日推荐