2013-03-23 85 views
0

我有一個正在運行的應用程序,它已經將u'text'錯誤地存儲到所有數據庫字段中。我現在需要創建一個腳本來閱讀這些字段,並用文本替換u'text。python正則表達式從unicode輸出中刪除u'some文本'

誰能幫我,我怎麼可以用Python語言編寫這樣的正則表達式會讀它用U「開頭的字符串與結束,結束」字符串的開頭,然後用什麼代替他們。我試了幾個但在正則表達式上卻很糟糕。

任何幫助將是非常讚賞,

回答

1

這應做到:

import re 
re.sub("^u'(.*)'$",r'\1',"u'text'") 
-> text 

這將在一個字符串值工作,而前/後的字符(如「u'text'」) 。

如果你想有一個字符串內更換u'text出現的所有」,你可以這樣做,而不是:

re.sub("u'([^']*)'",r'\1',STRING) 

例如:

re.sub("u'([^']*)'",r'\1',"u'value1',u'value2',u'value3'") 
-> value1,value2,value3 
+0

嗨jsedev,謝謝。它解決了,但我有一個奇怪的問題,當我在循環內使用它返回','.join(re.sub(「^ u'(。*)'$」,r'\ 1',i)for i in value_list)它只能在第一個元素上工作 – 2013-03-23 15:29:22

+0

您需要使用列表解析:'','.join([re.sub(「^ u'(。*)'$」,r'\ 1',i )for i in value_list])' – isedev 2013-03-23 15:31:20

+0

仍然是同一個問題: – 2013-03-23 15:36:07

3

注意,你可能有一些字符串而不是由u" "分隔,如果該字符串包含單引號。另外,可能有轉義序列。 ast.literal_eval可以爲您處理所有:

from ast import literal_eval 

def convert(original): 
    try: 
     result = literal_eval(original) 
     if isinstance(result, unicode): 
      return result 
    except ValueError: 
     pass 
    return original