[英]Why does this regular expression not work?
我有一個解析HTML代碼的函數,因此它易於讀寫。 為了做到這一點,我必須用多個分隔符分割字符串,你可以看到我使用了re.split()
,我找不到更好的解決方案。 但是,當我提交一些像這樣的 HTML時,它絕對沒有效果。 這讓我相信我的正則表達式寫得不正確。 那應該是什么?
def parsed(data):
"""Removes junk from the data so it can be easily processed."""
data = str(data)
# This checks for a cruft and removes it if it exists.
if re.search("b'", data):
data = data[2:-1]
lines = re.split(r'\r|\n', data) # This clarifies the lines for writing.
return lines
如果你發現一個類似的問題,這不是重復,我已經爬了好幾年,它仍然無法正常工作。
您正在將bytes
值轉換為字符串:
data = str(data)
# This checks for a cruft and removes it if it exists.
if re.search("b'", data):
data = data[2:-1]
這意味着所有行分隔符都已轉換為其Python轉義碼:
>>> str(b'\n')
"b'\n'"
這是一個文字b
,文字引用,文字\\
反斜杠,文字n
,文字引用。 你必須拆分r'(\\\\n|\\\\r)'
,但最重要的是,你不應該在這里將字節值轉換為字符串表示。 Python將字節值的表示形式作為文字字符串,您可以將其粘貼回Python解釋器,這與對象中包含的值不同 。
您想要解碼為字符串:
if isinstance(data, bytes):
data = data.decode('utf8')
我假設數據是用UTF8編碼的。 如果這是來自Web請求的數據,則響應頭通常包括用於對Content-Type
頭中的數據進行編碼的字符集,查找charset=
參數。
urllib.request
模塊生成的響應具有.info()
方法,並且可以提取字符集(如果提供):
charset = response.info().get_param('charset')
如果沒有提供字符集,則返回值為None
。
您不需要使用正則表達式來分割線, str
類型有一個專用方法str.splitlines()
:
返回字符串中的行列表,在行邊界處斷開。 此方法使用通用換行方法來分割線。 除非給出keepends且為true,否則換行符不包括在結果列表中。
例如,
'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()
返回['ab c', '', 'de fg', 'kl']
,而使用splitlines(True)
進行相同的調用splitlines(True)
返回['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.