Регулярное выражение для замены нескольких строк, соответствующих шаблону - PullRequest
5 голосов
/ 02 марта 2010

Если у меня есть такая куча текста

The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)
The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Yen)
The cat sat on the mat

Существует ли регулярное выражение, которое я мог бы использовать в функции Найти / Заменить моего текстового редактора (Jedit), чтобы идентифицировать все строки, которые начинаются со слов Expropriations, а заканчиваются на закрывающая скобка , а затем заключите эти строки в квадратные скобки , чтобы они выглядели так:

The cat sat on the mat
[Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)]
The cat sat on the mat
[Expropriations for international monetary exchange ( Currenncy: Yen)]
The cat sat on the mat

Хитрость заключается в том, что закрывающая скобка может находиться в конце той же строки, что и слово «экспроприация», или в конце следующей строки. (перед закрытием скобок может быть даже более одной строки)

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

Вы можете соответствовать:

^(Expropriations[\d\D]*?\))

и замените его на:

[$1]

\d\D соответствует любому символу, включая символ новой строки.

0 голосов
/ 02 марта 2010

Поддерживает ли Jedit поиск и заменяет его многострочными регулярными выражениями?

Вот как это сделать, используя скрипт на Python.

Основная задача - установить флаги DOTALL ('s') и MULTILINE ('m') регулярного выражения.

import re
str = """The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)
The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Yen)
The cat sat on the mat"""

regex = re.compile(r'^(Expropriations.*?\))', re.S|re.M)
replaced = re.sub(regex, '[\\1]', str)
print replaced

Кот сидел на коврике
[Экспроприации для международного валютного обмена (валюта: доллары,
Значение: 50000)]
Кот сидел на коврике
[Экспроприация для международного валютного обмена (валюта: иена)]
Кот сидел на коврике

0 голосов
/ 02 марта 2010

Если вы можете указать параметры регулярного выражения, попробуйте активировать «одну строку». Таким образом, регулярное выражение не заботится о переносах строк.

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