正则表达式操作切断第一个字母

时间:2017-04-23 19:41:12

标签: python regex string replace

我试图编写一个Python脚本来查找目录树中的所有.py文件,并进行以下替换:

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

但目前的结果如下:

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

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

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)

1 个答案:

答案 0 :(得分:2)

(之后的最合适的字符与此部分匹配的点:\(.删除点。您还需要转义应该与文字句点符号匹配的点。

使用

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