2010-03-02 3 views
5

Если у меня есть куча текста, как этотРегулярного выражения для замены несколько строк, которые соответствуют шаблону

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 

Есть регулярное выражение я мог бы использовать в Find/Replace особенности моего текстового редактора (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 

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

ответ

2

Вы можете матча:

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

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

[$1] 

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

0

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

0

Поддерживает ли 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 

кот сидел на коврике
[экспроприаций для международной валютной биржи (Currenncy: Доллары,
Стоимость: 50 000)]
кот сидел на коврике
[экспроприаций для международной валютной обмен (Currenncy: Yen)]
Кошка сидела на коврике

Смежные вопросы