2014-10-28 2 views
-1

Я провел прошлой ночью, пытаясь разобраться со строками в Python3. Было бы очень полезно с вашей стороны, если бы вы помогли мне решить эту проблему.Выполнить выборочную замену на строку python?

Итак, предположим, что я строка, как это:

a = "√22+34-4+√(2+3)/5+√3" 

NB: строка а является пользовательский ввод и может меняться каждый раз.

я хочу управлять строку быть таким:

a = "√(22)+34-4+√(2+3)/5+√(3)" 

тогда я могу заменить "√" на "SQRT" с использованием a.replace("√","sqrt").

Есть предложения? И извините за мой плохой английский :) Спасибо

+0

То, что вы пытаетесь сопоставить, это что-то вроде «√», за которым следует строка цифр, но не √ с последующим выражением в круглых скобках », правильно? Это довольно сложно написать с точки зрения чистых методов 'str', но относительно легко писать в терминах регулярных выражений или' pyparsing', или почти что-либо еще. – abarnert

+0

Если ваш вопрос действительно о том, как изменить строку python: вы не можете (по крайней мере, не «на месте»). Тем не менее, вы можете создавать новые строки на основе предыдущего. http://stackoverflow.com/questions/9189172/python-string-replace –

+0

@abarnet & Ricardo Cárdenes: Я хочу сделать, чтобы поймать цифры, следующие за √, и останавливается, когда есть «+» или «-» или « * "или"/"или" ("или") ". Ответ arshaji достаточно хорош для моей проблемы. Я могу использовать регулярное выражение «re». Большое спасибо за ответы :) –

ответ

4

Вы можете попробовать re.sub():

>>> import re 
>>> a = "√22+34-4+√(2+3)/5+√3" 
>>> re.sub(r'√(\d+)', r'√(\1)', a) # \1 is whatever was captured by (\d+) 
'√(22)+34-4+√(2+3)/5+√(3)' 

Но если вам нужно что-нибудь более сложное, вы, вероятно, придется написать парсер какой-то.

+1

@ nexus66 Обратите внимание, что 're.sub (..., ..., a)' НЕ ИЗМЕНЯЕТ вашу строку 'a', вместо этого она создает новую строку! Если вы хотите использовать новую строку (одну с круглыми скобками), вам нужно назначить новую строку переменной_. Общим шаблоном является просто «a = re.sub (..., ..., a)», в котором вы выбрасываете старую строку, чтобы заменить ее на новую. – gboffi

+0

@arshajii: Да! Это то, что я ищу. Я помню, что я нашел fonction re на моих курсах Python3. Я постараюсь понять ваш ответ. Большое спасибо за ваш быстрый ответ :) –

+0

@gboffi: Да! Возврат этой функции является строкой. Я помещаю его в свой код PyGObject, и он работает хорошо! Я пытаюсь создать калькулятор, используя Python3 и Gtk3 +. –

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