Как использовать re, чтобы удалить охватывающий шаблон из строки в Python - PullRequest
0 голосов
/ 17 января 2019

У меня есть строка, которая может выглядеть так:

string = '{({var.Var1} / {var.Var2} + {var.Var3})-{var.Var1}}'

моя цель - получить

parsed_string = '{(Var1 / Var2 + Var3)-Var1}'

Если я использую re.findall как:

import re

string = '{({var.Var1} / {var.Var2} + {var.Var3})-{var.Var1}}'
regex = r"\{var\.(\w+)\}"
search = re.findall(regex,string)

search = ['Var1', 'Var2', 'Var3', 'Var1']

Я попытался использовать re.sub, однако он принимает только один вход. Так что это вернет

parsed_string = '{(Var1 / Var1) + Var1-Var1}'

Существует ли команда re (или аналогичная), которая может вывести целевую строку parsed_string за один шаг? Или я должен создать цикл с re.search с комбинацией re.sub (разграничен на первый случай).

Ответы [ 2 ]

0 голосов
/ 17 января 2019

В качестве дополнения к инструкции, Var может быть любой строкой, поэтому строка также может быть:

string = '{({var.Str1} / {var.X2} + {var.Y3})-{var.Str1}}'

Я пытался сделать цикл, такой как

import re

string = '{({var.Str1} / {var.X2} + {var.Y3})-{var.Str1}}'
regex = r"\{var\.(\w+)\}"
search = re.findall(regex,string)
for item in search:
    string = re.sub(r"\{var\.(\w+)\}",item,string,1)

Кажется, это работает нормально, но мне все еще интересно, есть ли какой-нибудь трюк, который сделал бы это за один шаг.

0 голосов
/ 17 января 2019

Это должно сделать это:

string = '{({var.Var1} / {var.Var2} + {var.Var3})-{var.Var1}}'
string2 = '{({var.Var1} / {var.Var(33)} + {var.Simplotid})-{var.Nukleodid(43)parle}}'

import re
pattern = r'\{var\.(.+?)\}'

for t in [string, string2]:
    print(re.sub(pattern,r"\1",t)) # {(Var1 / Var2 + Var3)-Var1}

Выход:

{(Var1 / Var2 + Var3)-Var1}
{(Var1 / Var(33) + Simplotid)-Nukleodid(43)parle}

Шаблон соответствует r'\{var\.(.+?)\}' и заменяет всю деталь на то, что записано внутри ( ... ) .. Вот что делает строка замены r"\1":

\0  whole matched thing front to back
\1  first matched group 
\2  second matched group ... etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...