簡體   English   中英

為什么這個正則表達式不起作用?

[英]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.

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