2017-07-26 83 views
3

我想編寫Python正則表達式是需要模式的字符串:Python的正則表達式:爲什麼不接受我的模式?

「u'Johns的地方」,」

和回報:

約翰的地方

它應該找到字符'u',撇號在它之後,然後是在c之前的撇號omma並返回這兩個撇號之間的內容。

因此,我寫了下面的代碼:

title = "u'Johns's Place'," 
print re.sub(r"u'([^\"']*)',", r"\"\1\"", title) 

不過,我還是得到了整個字符串

「u'Johns的地方」,」

沒有過濾。

你知道它是如何解決的嗎?

+4

我懷疑有關你的字符串中有「u」,你是如何得到這個字符串的? – idjaw

+0

其實這'你'應該提到'unicode' – CrazySynthax

+4

是的,這正是我爲什麼對此感到懷疑。我想你應該解釋*你是如何得到那個字符串的,因爲這聽起來像是一個XY問題。 – idjaw

回答

7

Python不接受你的模式,因爲中間'"John's"。如您的模式中所述,它後面沒有逗號。匹配不能繼續尋找',,因爲您只允許不是"'[^\"']*的字符。

如果您想用Python解析JSON,請使用json包,而不是將regexen應用於轉義的unicode字符串。

+0

好的。但是在Place之後有一個逗號。所以我希望python忽略John's中的逗號並在「Place」後面加逗號「 – CrazySynthax

+1

@CrazySynthax:匹配無法繼續,您禁止使用'[^ ​​\''] *'。 –

2

我不使用Python很多,但這個表達式應該解決您的問題

^u'(.*)',$ 

從一開始就u和單引號匹配,捕捉後任何事情,直到單引號和逗號末

print re.sub(r"^u'(.*)',$", r"\"\1\"", title) 

刪除^和$如果還有更多您的字符串比更換(換句話說,如果有任何上下文)

0

作出更大的研究後,我發現了個是包https://simplejson.readthedocs.io/en/latest/

它可以讓你閱讀一個JSON文件,而不用爲每個字符串放置'..'。

import simplejson as json 
import requests 

response_json = requests.get(<url-address>) 
current_json = json.loads(response_json.content) 

current_json在每個字符串的beginnig都沒有字符'u'。

它回答我的問題,部分是因爲它返回由一個單引號(')分隔,而不是用引號(「),因爲它需要的JSON格式鍵和值。

相關問題