Изменение нескольких мест в файле за одну итерацию Python - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь изменить файл, в котором я хочу заменить некоторые скобки добавленными параметрами. Однако использование re.search останавливается при первом успехе, и даже re.findall не помогает.

def Modify_Brackets(file_name):
    input=open(file_name,"r")
    output = open("help.txt", "w+")
    for line in input:
        text = input.read()
        matches = re.findall(r'(rule).*([0-9]+).*:.*(\[.*\])(\s*)\-\-(\s*)(\[.*\])(\s*)\-\>(\s*)(\[.*])', text)
        for m in matches:
            Brackets= m[5][1:-1]
            ModifiedBrackets = re.sub(r'\)',',changed)',Brackets)
            newline = text.replace(m[5], ModifiedBrackets)
            output.write(newline)
        else:
            output.write(text + "")

Ввод:

<some text>
rule abc1 :  [some text]
  --[ f(a,b), g(x,y)    ]->
          [some text]
<some text>
<some text>
rule abc2 :  [some text]
  --[ f(x,b), g(a,y)    ]->
         [some text]

Текущий вывод:

<some text>
rule abc1 :  [some text]
  --[ f(a,b,changed), g(x,y,changed)    ]->
          [some text]
<some text>
<some text>
rule abc2 :  [some text]
  --[ f(x,b), g(a,y)    ]->
         [some text]

Ожидаемый результат:

<some text>
rule abc1 :  [some text]
  --[ f(a,b,changed), g(x,y,changed)    ]->
          [some text]
<some text>
<some text>
rule abc2 :  [some text]
  --[ f(x,b,changed), g(a,y,changed)    ]->
         [some text]

Как видите, он работает хорошо только для первого правила и останавливается после этого. Я хочу, чтобы это изменение ко всем правилам, присутствующим в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...