2014-10-28 22 views
-1

我昨晚在Python3中试图处理字符串。 如果你能帮助我解决这个问题,那么从你的角度来看,这将非常有帮助。对python字符串执行选择性替换?

所以,假设我有一个字符串,像这样:

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

注:该字符串是用户输入,并且可以改变每一次。

我要管理的字符串是这样的:

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

然后我可以代替“√”,由“开方”使用a.replace("√","sqrt").

有什么建议?很遗憾我的英语不好:) 感谢

+0

你想要匹配的是“√后面跟着一串数字,但不是√,后面跟着括号中的表达式”,对吧?用纯粹的'str'方法编写起来相当困难,但用正则表达式或pyparsing'或其他几乎任何其他方法编写都比较容易。 – abarnert 2014-10-28 01:02:55

+0

如果你的问题真的是关于如何修改一个Python字符串:你不能(至少不是“就地”)。不过,您可以根据前一个创建新的字符串。 http://stackoverflow.com/questions/9189172/python-string-replace – 2014-10-28 01:05:00

+0

@abarnet&RicardoCárdenes:我想要做的是抓住后面的数字√,当出现“+”或“ - ”或“ *“或”/“或”(“或”)“。 arshaji的答案足以解决我的问题。我可以使用正则表达式“re”。 非常感谢您的回答:) – 2014-10-28 01:58:44

回答

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 2014-10-28 01:15:40

+0

@arshajii:是的!这就是我要找的。我记得我在Python3课程中发现了这个功能。 我会尽力了解你的答案。 非常感谢您的快速回答:) – 2014-10-28 01:54:32

+0

@gboffi:是的!这个函数的返回是一个字符串。我把它放在我的PyGObject代码中,它工作的很好! 我正在尝试使用Python3和Gtk3 +创建一个计算器。 – 2014-10-28 02:05:39