2013-05-08 4 views
0

У меня есть строка:Заменить содержимое между ними с помощью регулярных выражений питона

'[text], text, {text}, itextm' 

я должен закончить с:

'[replaced], text, {replaced}, ireplacedm' 

Как я могу сделать это с модулем питона повторно? Спасибо!

+3

Что вы думали и пробовали? –

+0

Посмотрите на 're.sub()'. – Alfe

+2

Какие именно * являются параметрами того, когда вещи следует заменить? Каждый раз, когда текст, который вы ищете, появляется в двух символах без пробелов? Вы пытаетесь заменить весь такой текст или только определенные строки? Вам нужно дать гораздо более конкретную информацию, если вы хотите, чтобы кто-нибудь дал вам полезный ответ. –

ответ

0
In [1]: s='[text], text, {text}, itextm' 
In [2]: import re 
In [3]: re.sub(r'([[{])[^\]}]*',r'\1replaced',s) 
Out[3]: '[replaced], text, {replaced}, itextm' 

EDIT

ах ... Я не заметил последнюю часть вашего примера, то ireplacedm!

теперь это должно работать на вашем примере:

In [8]: re.sub(r'([^ ,])text([^ ,])',r'\1replaced\2',s)                              
Out[8]: '[replaced], text, {replaced}, ireplacedm' 
+0

Спасибо, что я хочу! –

0

Это не идеально, потому что он не будет работать должным образом, если у вас есть настройка, например [term}more], но она по крайней мере работает для вашего примера.

re.sub(r'([[{]).*?([\]}])', r'\1replaced\2', str) 
+0

У меня такая же идея, как у вас. взгляните на последнее слово в своем выпуске. : D – Kent

0

Вы можете использовать этот шаблон:

import re 

pattern = '(?<=(\[)|(\{)|([a-z])|.)text(?=(?(1)]|(?(2)}|(?(3)|[a-z]))))' 
subject = '[text], text, {text}, itextm [text} {text] textus atext' 
result = re.sub(pattern, 'replaced', subject) 

print result 

он проверяет, если квадратные или фигурные скобки сбалансированы или совпадают слово, когда есть по крайней мере, одна буква в начале или в конце.

Результат:

[replaced], text, {replaced}, ireplacedm [text} {text] replacedus areplaced 
Смежные вопросы