2016-01-07 56 views
1

整個文件由如下所示的行組成。Python:使用正則表達式從字符串中移除一個字符

\"ansText\" : \"11\", 
\"boundsX\" : 0, 
\"string\" : \"11\" 

對於開始title任何線路,我想從後它的字符串刪除字符;。下面是預期輸出的一個例子

輸入:

\"title\" : \"244442424268391(:)7)$(.:$?3.&!&3$83;767:2\", 

輸出:

\"title\" : \"244442424268391(:)7)$(.:$?3.&!&3$83767:2\", 

我知道如何設置正則表達式使用找表達標題:

str0 = re.sub(r'\"title.*',"\"title\" : ",str0) 

但我不太確定如何保留原始字符串,但只刪除一個字符。

+1

這看起來像JSON。如果是這種情況,請使用JSON解析器。 – nhahtdh

回答

0

您可以使用像這樣:(\\"title\\" : \\".+?);(.+?\\")(例如here),並在它替換正則表達式組號碼1和2的字符串這個表達式將查找包含\"title\"字符串和一個;性格和使用這些信息來創建兩個規則表達組,這給出\"title\" : \"244442424268391(:)7)$(.:$?3.&!&3$83;767:2\",,輸出將是:;

Group 1: \"title\" : \"244442424268391(:)7)$(.:$?3.&!&3$83 
Group 2: 767:2\" 

當你將這兩個字符串結合起來時,你會得到你以後的結果。

str0 = re.sub(r'(\\"title\\" : \\".+?);(.+?\\")',r"\1\2", str0) 
+0

當有更多的';'比一個更多時它會失敗。對? –

+0

@KevinGuan:它仍然應該做你以後的事情,但是第一個';'(從左邊開始)將不會包含在結果中。 – npinti

+0

這就是我的意思,我認爲OP可能希望從字符串中刪除所有';',如果字符串中有更多'';而不是第一個';'。 –

2

你可以簡單地做這個用str.replace()str.startswith()沒有正則表達式是這樣的:

>>> str0 = r'\"title\" : \"244442424268391(:)7)$(.:$?3.&!&3$83;767:2\",' 
>>> str0 = str0.replace(';', '') if str0.startswith(r'\"title\" : ') else str0 
>>> str0 
'\\"title\\" : \\"244442424268391(:)7)$(.:$?3.&!&3$83767:2\\",' 
相關問題