簡體   English   中英

Python用反斜杠替換正斜杠

[英]Python replace forward slash with back slash

我有

foo = '/DIR/abc'

我想把它轉換成

bar = '\\MYDIR\data\abc'

所以,這就是我在 Python 中所做的:

>>> foo = '/DIR/abc'
>>> bar = foo.replace(r'/DIR/',r'\\MYDIR\data\')
  File "<stdin>", line 1
    bar = foo.replace(r'/DIR/',r'\\MYDIR\data\')
                                                 ^
SyntaxError: EOL while scanning string literal

但是,如果我嘗試通過輸入bar = foo.replace(r'/DIR/',r'\\\\MYDIR\\data\\\\')來逃避最后一個反斜杠,那么我會得到這個怪物:

>>> bar2
'\\\\MYDIR\\data\\\\abc'

幫助! 這讓我發瘋。

第二個參數應該是一個字符串,而不是一個正則表達式模式:

foo.replace(r'/DIR/', '\\\\MYDIR\\data\\')

您遇到此問題的原因是r""語法的行為,從Python 文檔中獲取一些解釋

r"\\"" 是由兩個字符組成的有效字符串文字:一個反斜杠和一個雙引號;r"\\" 不是有效的字符串文字(即使原始字符串也不能以奇數個反斜杠結尾)。具體來說,一個原始字符串不能以單個反斜杠結尾(因為反斜杠會轉義后面的引號字符)。

因此,您需要對最后一個參數使用普通的轉義字符串。

>>> foo = "/DIR/abc"
>>> print foo.replace(r"/DIR/", "\\\\MYDIR\\data\\")
\\MYDIR\data\abc

我只是在/前面放了一個r來改變正斜杠。

inv_num = line.replace(r'/', '-')

兩個問題:

  1. 原始文字不能以單個反斜杠結尾,因為它被解釋為轉義引號字符。 因此,使用帶有轉義'\\\\\\\\MYDIR\\\\data\\\\'的常規(非原始)文字: '\\\\\\\\MYDIR\\\\data\\\\'
  2. 顯示時(使用repr樣式),字符串將帶有轉義符。 因此, '\\\\\\\\'只有兩個實際的反斜杠。 所以, '\\\\\\\\MYDIR\\\\data\\\\\\\\abc'實際上是\\\\MYDIR\\data\\\\abc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM