python - 正则表达式操作截掉第一个字母

标签 python regex string replace

我正在尝试编写一个 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/

相关文章:

python - Django 1.8 'default' 选项只执行一次外部函数

python - 使用 Tesseract 和 Pyocr 在 Python 中获取字体大小

javascript - 正则表达式负向预测不包括整个 block

c++ - std::string的大小是否总是打印字符的数量?

python - 在 PYTHON 中用另一个数字替换一个数字

php - Javascript 和 Php 字符串的未捕获语法错误

python - .gitignore 符号中的 "py[cod]"和 "pyc"有什么区别?

python - 在 Django 中检测更改的密码

javascript - 使用 jQuery 从响应中进行正则表达式匹配

php - 正则表达式碰撞检测