2014-10-28 26 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