re.search не может найти шаблон регулярных выражений внутри файла - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть тестовый файл (test.txt), как показано ниже:

`RANGE(vddout,sup)

`RANGE(vddin,sup_p) 

Я хотел бы изменить этот файл, как показано ниже:

`RANGE(vddout,sup,tol_sup)

`RANGE(vddin,sup_p,tol_sup_p)

Вот код, который я пробовал, ноего невозможно найти и заменить шаблон с помощью re.search.Не могли бы вы указать, где недостаток в коде?

 with open("test.txt", 'r+') as file :
    for line in file:
        print("line={}".format(line))
        findPattern=re.search(r'(`RANGE\(\w+,(\w+))\)',line)
        if findPattern:
            print("findPattern={}".format(findPattern))
            line=re.sub(r'(`RANGE\(\w+,(\w+))\)',r'\1,tol_\2',line)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Как уже упоминалось в комментариях, вы не пишете файл.

Более того, вы читаете каждую строку одну за другой, когда вы можете просто читать весь файл как строку для выполнения ваших манипуляций.Это неэффективно (так как вам нужно выполнить re.sub несколько раз) и сложнее * кодировать (поскольку вам нужно создать новую строку для записи в файл).

Наконец, вы выполняете re.match и re.sub.Это не нужно, так как re.sub просто ничего не сделает, если нет совпадений;вам не нужно сначала проверять.

In [188]: with open('test.txt', 'r+') as f:
     ...:     data = f.read()
     ...:     updated = re.sub(r'(`RANGE\(\w+,(\w+))', r'\1,tol_\2', data)
     ...:     f.seek(0)         # Start writing at the beginning of the file
     ...:     f.write(updated)

* Примечание: более сложный, но не сложный

0 голосов
/ 30 ноября 2018

Это должно работать.(Вам не нужно сначала искать, а затем заменять. Вы можете напрямую попытаться заменить. Он заменяет только в том случае, если он совпадает в первую очередь)

import re

with open("test.txt", 'r+') as file :
    for line in file:
        print(line)
        print(re.sub(r'`RANGE\((\w+),(\w+)\)', r'`RANGE(\1,\2,tol_\2)`', line))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...