2016-07-29 78 views
1

我有一個字符串要替換反斜線python3串

"abc INC\","None", "0", "test" 

從這個字符串我想替換反斜線的任何發生是在它之前「出現與管道|。其實我寫了下面的代碼,但它取出「並離開」後面「。

import re 
str = "\"abc INC\\\",\"None\", \"0\", \"test\"" 
str = re.sub("(\\\")", "|", str) 
print(str) 

Output: |abc INC\|,|None|, |0|, |test| 
Desired Output: "abc INC|","None", "0", "test" 

有人能指出我做錯了什麼嗎?

+0

不知道python,但是你可以使用這個正則表達式'\\(?=「)' –

+0

請用'''來分隔你的python字符串,如果裏面有'''',會更清楚看到什麼是你的字符串 – Jacquot

+0

@MosesKoledoye它是一個完整的字符串。閱讀有轉義序列的代碼。這裏 – r0xette

回答

0

您可以使用以下正預測先行斷言'\\(?=")'

import re 

my_str = "\"abc INC\\\",\"None\", \"0\", \"test\"" 
p = re.sub(r'\\(?=")', '|', my_str) 
print(p) 
# '"abc INC|","None", "0", "test"' 

儘量不要使用內建的名字爲名稱的變量,即str,以避免影響內建。

+0

這樣做的工作。任何好的教程,我可以學習這個壞男孩嗎? – r0xette

+0

@ r0xette你可以從[re docs]開始(https:// docs.python.org/2/library/re.html)。這裏有很多有用的細節:) –

2

請參閱Jamie Zawinksi的famous quote about regular expressions。儘量只在絕對必要的時候使用re。在這種情況下,它不是。

str的實際內容(壞名的變量,順便說一句,因爲有一個內置的類型名稱)是

"abc INC\","None", "0", "test" 

爲什麼不

str.replace('\\"', '|"') 

這將做你想要的。

+0

謝謝,我沒有考慮它,我會記住「嘗試只有在絕對必要時才使用re。「 – r0xette

0

這必須解決您的問題:

import re 
s = "\"abc INC\\\",\"None\", \"0\", \"test\"" 
s = re.sub(r"\\", "|", s) 

也不要使用str作爲一個變量名,它是一個保留關鍵字。

0

對於python正則表達式中的字面反斜槓,您需要轉義兩次,爲您提供'\\\\"'"\\\\\""的模式。第一次轉義是python需要在字符串中添加反斜槓。但是,正則表達式自己使用反斜槓作爲特殊字符(例如\w單詞字符等)。 documentation陳述爲:

特殊序列由'\'和下表中的一個字符組成。如果普通字符不在列表中,則生成的RE將匹配第二個字符。

所以圖案\"將匹配單個"因爲"是不是有特殊的含義有一個字符。

您可以使用原始符號只能轉義一次:r'\\"'