我正在尝试编写一个 Python 脚本,它将查找目录树中的所有 .py 文件,并进行以下替换:
myAppl.Variable(VDC).Read() --> MAPort.Read(Model.VDC).Value
但是目前的结果如下:
myAppl.Variable(VDC).Read() --> MAPort.Read(Model.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)
最佳答案
由于这部分,(
后面的最适合的字符与点匹配: \(.
删除点。您还需要转义应该的点匹配文字句点符号。
使用
r'myAppl\.Variable\(([^()]*)\)\.Read\(\)'
并替换为r'MAPort.Read(Model.\1).Value'
。
请参阅regex demo和一个Python 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
关于python - 正则表达式操作截掉第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43575683/