2017-04-23 75 views
1

我想写一个Python脚本,会发现在一个目录树中的所有.py文件,并进行以下替换:正则表达式操作切断第一个字母

myAppl.Variable(VDC).Read () - > MAPort.Read(Model.VDC)。价值

但是它当前得到的,如下所示:

myAppl.Variable(VDC).Read() - > MAPort.Read(型号.DC).Value

为什么我的变量的第一个字母被删除了,我做了什么错了?

mypath = "P:\\myTest" 
fnames = [] 
for root, subFolders, files in os.walk(mypath): 
    for file in files: 
     if file.endswith(".py"): 
      fnames.append(root + '\\' + file) 
for fname in fnames: 
    with open(fname) as reader: 
     data = reader.read() 
    data = re.sub(r'(myAppl.Variable\(.(.+)\).Read\(\))', 
        r'MAPort.Read(Model.\2).Value', data) 
    with open(fname, 'w') as writer: 
     writer.write(data) 
+0

因为点 - '\('删除它 –

+0

高兴它为你工作也请考虑upvoting如果我的回答证明对您有所帮助(。请参阅[如何在Stack Overflow上注册?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow))。 –

回答

2

(后fitst炭用点匹配由于这一部分:\(.取出点。您还需要避开与文字周期符号相匹配的点。

使用

r'myAppl\.Variable\(([^()]*)\)\.Read\(\)' 

r'MAPort.Read(Model.\1).Value'取代。

regex demoPython demo:。

import re 
rx = r"myAppl\.Variable\(([^()]*)\)\.Read\(\)" 
s = "myAppl.Variable(VDC).Read()" 
result = re.sub(rx, r"MAPort.Read(Model.\1).Value", s) 
print(result) 
# => MAPort.Read(Model.VDC).Value 
相关问题