Удалите текст из скобок, если в скобках есть определенное слово в python - PullRequest
0 голосов
/ 27 мая 2020

У меня есть образец строки

s='((Xyz_lk) some stuff (XYZ_l)) (vbc vb XyZ vc))'
s = '((Xyz_lk) some stuff (XYZ_l)) (XyZ vc))'
s = '((Xyz_lk) some stuff (XYZ_l)) (vc XyZ))'

если XyZ появляется где-нибудь внутри скобок, начиная и заканчивая, затем удалите текст в этой скобке

output  ='((Xyz_lk) some stuff (XYZ_l)))'

Как я могу сделать это самым простым способом возможный путь в Python? Может быть, используя RegEx (в чем я не разбираюсь)?

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вы можете просто сделать это.

1> Проверить погоду, в какой строке (XyZ) находится требуемая строка.

2> После получения местоположения найдите местоположение скобка, окружающая эту строку.

3> Пропустить эту часть строки в выходной строке.

s='((Xyz_lk) some stuff (XYZ_l)) (vbc vb XyZ vc))'

if "XyZ" in s:
    index = s.index("XyZ")

i = j = index   

while s[i] != "(":
    i -= 1

while s[j] != ")":
    j += 1

output = (s[ :i] + s[j+1:])
print(output)
0 голосов
/ 27 мая 2020

Вы можете сделать

re.sub(r"\s*\((\w|\s)*(xyz|XyZ)(\w|\s)*\)", "", s)

Результат

'((Xyz_lk) some stuff (XYZ_l)))'

Регулярное выражение \s*\((\w|\s)*(xyz|XyZ)(\w|\s)*\) получает любой пробельный символ, за которым следует (за которым следует любой пробельный символ, равный нулю или больше, или нулевой символ слова или больше, чем шаблон XyZ и снова любой пробельный символ ноль или больше или символ слова ноль или больше, за которым следует)

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