2016-05-22 5 views
-2

Я хотел бы заменить количество с именем, а затем квадратной скобкой и одной цитатой с содержимым внутри. Таким образом, из этого:Python regex - Заменить одиночные кавычки и скобки

RSQ(name['BAKD DK'], name['A DKJ'])

к этому:

RSQ(BAKD DK, A DKJ)

+0

Какая у вас проблема в этом, или вы просто просите кого-то сделать эту работу за вас? –

ответ

3

код -

import re 
s = "RSQ(name['BAKD DK'], name['A DKJ'])" 
expr = r"[\'\[\]]|\bname\b" 
print(re.sub(expr, '', s)) 

Выход -

RSQ(BAKD DK, A DKJ) 
+1

Я не думаю, что это выражение является надежным. Представьте, что у вас есть что-то (имя ['BAKD DK'], имя ['A DKJ']) 'строка ввода. В результате вы получите 'sothig (BAKD DK, A DKJ)' - явно не то, о чем спрашивал ОП. – alecxe

+0

@alecxe Вы правы. Я отредактирую свой ответ. –

+0

Хорошо, но теперь, если бы у нас было бы имя (имя ['BAKD DK'], имя ['A DKJ']) '? .. в любом случае, если ответ принят, то он, вероятно, соответствует потребностям OP на момент. Удалено нисходящее. Спасибо. – alecxe

2

Вы также можете использовать сберегательные группы для извлечения строк из внутри name['something']:

>>> import re 
>>> s = "RSQ(name['BAKD DK'], name['A DKJ'])" 
>>> re.sub(r"name\['(.*?)'\]", r"\1", s) 
'RSQ(BAKD DK, A DKJ)' 

где (.*?) является capturing group, который соответствовал бы любым символам, любому количество раз в non-greedy fashion. \1 ссылается на захваченную группу в заменяющей строке.

+0

просто из любопытства, что было бы регулярным выражением для изменения данного ввода на 'XYZ (BAKD DK, A DKJ)' – rock321987

+0

@ rock321987 уверен, если вы хотите заменить 'RSQ' на' XYZ' также, вероятно, я сделаю это в отдельном вызове 're.sub()', что-то вроде 're.sub (r"^(\ w +) (? = \() ", r" \ 1 ", s) '. – alecxe

+0

да..хорошо мне интересно узнать, можно ли это сделать в одном регулярном выражении? – rock321987

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