通过匹配输入文件中的字符串来编写新文件

时间:2014-08-25 22:07:58

标签: python regex string scripting

我有一些关于使用Python编写脚本的天真问题。

我有一些

形式的输入文件
"{1,g,{Frog,12}}",(x**2+.7*x)/2**x
"{2,{g,h},{Pig,17}}",(.8*x**3-1.3*x)/2.5**x

等,其中第一列的第一个和最后一个元素总是整数,第一列的第二个元素可以是字符串或列表,第一列的第三个元素是字符串,第二个元素是第二列column是新变量的函数。

我想创建一个输出文件,它接受每一行并以下列形式写入新文件:

    if newstr==1gCow82:
        return eval((.2*x**2+x-.3)/1.8**x)
    elif newstr==1gFrog12:
        return eval((x**2+.7*x)/2**x)
    elif newstr==2ghPig17:
        return eval((.8*x**3-1.3*x)/2.5**x)

(我将在其中添加类似

的内容
 def bignewfunction(a,b,c,d,x):
 newstr="".join(str(a),b,c,str(d))

手动地)。

我认为这不应该那么难,但它可能需要一些我无法吸收的正则表达式机制(例如,如何转换字符串“{a1,b1,{c1,d1} “到一个没有引号,括号或逗号的字符串”,还有一些我不知道的Python文件创建。或者,如果我可以从输入文件的第一列中删除括号和引号可能会更容易,但这也需要我目前缺乏的类似脚本技能。

非常感谢任何帮助。提前谢谢!

编辑已修改,以包含输入文件外观的更多具体示例。

1 个答案:

答案 0 :(得分:0)

我不熟悉Python,但有一些带有正则表达式的伪代码可以帮助你解决问题:

prefix = ''
for (find = regexfind(/"((?:[^"\\]|\\.)*)",([^\n]+)/gi)) {
  print prefix + 'if newstr==' + find[1].replace("\W", '') + ':'
  print '  return eval(' + find[2] + ')'
  prefix = 'el'
}

\W(大写!W)捕获不是a-z,0-9或_的所有内容,并用空字符串替换它。

可视化较长的正则表达式,为您提供所需的2个单独的部分:

Regular expression visualization

Debuggex Demo