Regex найти и переместить - PullRequest
0 голосов
/ 28 мая 2018

Надеюсь, вы не возражаете ответить на вопрос о регулярных выражениях: я хочу найти и переместить из одного места в другое в одном и том же файле.Это будет применяться к сотням файлов одновременно.Пример НАЙТИ из текста ниже: Cat1[changing text]Cat2 и MOVE после Dog1[changing text]Dog2

Исходный файл:

Cat1[variable text]Cat2 [variable text]
Dog1[variable text]Dog2 [variable text]
Cow1[variable text]Cow2 [variable text]

Желаемый результат:

  [variable text]
Dog1[variable text]Dog2Cat1[variable text]Cat2  [variable text]
Cow1[variable text]Cow2  [variable text]

Другими словами,Я пытаюсь переместить все, что происходит между Cat1 и Cat2 в другое место в том же файле.Новое местоположение в этом случае сразу после Dog1 ... Dog2.Есть ли регулярное выражение, которое учитывает это?Большое вам спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

В Python вы можете перемещать совпадающие шаблоны, используя re.sub и соответствующие группы.Функция re.sub заменит обратные ссылки, такие как \1, соответствующей соответствующей группой.

import re

text = """Cat1[text1]Cat2[text2]
Dog1[text3]Dog2[text4]"""


new_text = re.sub(
    r'(Cat1.*?Cat2)(.*?)(Dog1.*?Dog2)',
    r'\2\1\3',
    text,
    flags=re.DOTALL)

print(new_text)
# prints:
# [text2]
# Cat1[text1]Cat2Dog1[text3]Dog2[text4]
...