yan_gx
yan_gx
采纳率100%
2019-05-21 11:46

python,如何在零宽断言中的表达式exp使用变量来搜索匹配?

已采纳

我尝试用python编写个程序,主要目的是在test.txt中提取多个特定字段后的浮点数值。尝试用了零宽断言来提取特定字段后的数值,因为特定字段是多个的,便用了for循环,当在零宽断言中的表达式exp用变量时会报错“SyntaxError: invalid syntax”。上网查下零宽断言的用法,表达式exp好像是要用定长字符,我该如何实行我的目的。

encoding='utf-8'
encoding='gb18030'
import re
dingzhi=[ '失灵低电流', '重合闸控制字', '失灵零序电流', '突变量启动定值', '负序电流', '零序电流启动定值', '低功率因数', '不一致零序电流', '低功率因数过流', '不一致负序电流', '延时联跳延时', '三相不一致延时', '失灵保护延时', '充电段电流', '死区电流', '死区保护延时', '充电零序过流', '检同期角度', '充电段延时', '单重延时', '三重延时', '充电零序延时', '后合时间差', '失灵高电流', '后合跳闸延时']

def trans_dict(file):
    files = open(file,encoding='utf-8')
    files_content = files.readlines() #读取数据,返回一个list,每一行 为一个字符串
    result_list = [] #创建一个空列表

    for data_lines in files_content:  #遍历列表,取出每一行字符串

        # try:
        data_lines=str(data_lines.strip('\n').replace(' ','').replace('│','')) #处理数据删掉换行、空格和表格符号
        for dingzhi_a in dingzhi:
            p = re.compile('(?<='dingzhi_a')\s*\d*\.\d*')
            a=list(map(float,p.findall(data_lines)))
            print(a)

        # except :
        #   pass
        # else:
            # if a!=[]:
            #   print(a)

    files.close()

trans_dict('test.txt')

test.txt是这样的

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • yan_gx yan_gx 2年前

    搞明白了,其实就是字符串传参的事,我重构下程序,没问题了

    def ky(iuy,f2):
        q1='(?<='
        q2=')\s*\d*\.\d*'
        q=q1+iuy+q2
        p = re.compile(q)
        a=list(map(float,p.findall(f2)))
        if a!=[]:
            print(iuy,a)
    
    
    def trans_dict(file):
        files = open(file,encoding='utf-8')
        files_content = files.readlines() #读取数据,返回一个list,每一行 为一个字符串
        result_list = [] #创建一个空列表
    
        for data_lines in files_content:  #遍历列表,取出每一行字符串
            result_dict = {} # 创建一个空字典
    
            # try:
            data_lines=str(data_lines.strip('\n').replace(' ','').replace('│',''))
            for dingzhi_a in dingzhi:
                ky(dingzhi_a,data_lines)
    
        files.close()
    
    点赞 评论 复制链接分享
  • dabocaiqq dabocaiqq 2年前
    点赞 评论 复制链接分享