2010-03-11 95 views
29

給定一個包含字符串的變量是否有一種快速的方法將其轉換爲另一個原始字符串變量?在Python中鑄造原始字符串python

下面的代碼應該說明什麼IM後...

def checkEqual(x, y): 
    print True if x==y else False 

line1 = "hurr..\n..durr" 
line2 = r"hurr..\n..durr" 
line3 = "%r"%line1 

print "%s \n\n%s \n\n%s \n" % (line1, line2, line3) 

checkEqual(line2, line3)  #outputs False 

checkEqual(line2, line3[1:-1]) #outputs True 

到目前爲止,我已經找到了最接近的是,這似乎返回原始字符串儘管單引號內的%R格式的標誌。有沒有更簡單的方法來做到這一點,如line3 = raw(line1)種類的東西?

+0

請不要使用「鑄造」一詞。 Python沒有這樣的事情。您想要將原始字符串「轉換」或「轉換」爲另一個字符串。 「快」與它無關。 –

+2

'checkEqual'可以簡單的'return x == y' – pradyunsg

+1

謝謝@Schoolboy指出。它總是讓我看到像'print True True if else if'這樣多餘的東西:/ – OozeMeister

回答

61
"hurr..\n..durr".encode('string-escape') 
+6

很好。與各種編解碼器str.encode()正是我以後。 'unicode-escape'實際上解決了我也遇到的另一個問題。歡呼 – dave

+1

這對'\ w'等不起作用 –

+7

我在Python3.3中遇到錯誤 LookupError:unknown encoding:string-escape – Erik

3

還有一種方法:

>>> s = "hurr..\n..durr" 
>>> print repr(s).strip("'") 
hurr..\n..durr 
+0

如果's'中有一個''',那麼這將不起作用 –

+0

如果該字符串位於字符串中間,它應該沒問題,但它絕對不是健壯的(例如,它對Unicode字符串很敏感) 。 – Seth

0
>>> v1 = 'aa\1.js' 
>>> re.sub(r'(.*)\.js', repr(v1).strip("'"), 'my.js', 1) 
'aa\\x01.js 

>>> re.sub(r'(.*)\.js', r'aa\1.js', 'my.js', 1) 
'aamy.js' 

而且

>>> re.sub(r'(.*)\.js', raw(v1), 'my.js', 1) 
'aamy.js' 

,更好的原料方法impleme ntation

def raw(text): 
    """Returns a raw string representation of text""" 
    return "".join([escape_dict.get(char,char) for char in text]) 
1

上面顯示瞭如何編碼。

'hurr..\n..durr'.encode('string-escape') 

這種方式將解碼。

r'hurr..\n..durr'.decode('string-escape') 

Ex。

In [12]: print 'hurr..\n..durr'.encode('string-escape') 
hurr..\n..durr 

In [13]: print r'hurr..\n..durr'.decode('string-escape') 
hurr.. 
..durr 

這允許在兩個方向上「鑄造/變形原始字符串」。一個實際的例子是當json包含一個原始字符串並且我想很好地打印它。

{ 
    "Description": "Some lengthy description.\nParagraph 2.\nParagraph 3.", 
    ... 
} 

我會做這樣的事情。

print json.dumps(json_dict, indent=4).decode('string-escape')