簡體   English   中英

Python RegEx:無法捕獲所有數據(python3.6,scrapy)

[英]Python RegEx: Not capturing all the data (python3.6, scrapy)

我試圖使用以下簡單代碼編寫長度信息網站的腳本:

list = re.findall('(?<=Length:\s\s)[:\d]+', response.text)      
if len(list) > 0:            
    data['Length'] = list[0]        
else:            
    data['Length'] = '00:00'

但是,只有在長度信息少於一小時的情況下,它才能獲取信息。 例如,它將獲取51:00,但不會獲取01:08:47。 我檢查了源代碼的時間是否短於一個小時。 這是它們的外觀。 似乎長度超過1小時,空白空間減少了一個。 所以我嘗試了,但是這次,列表僅返回空白。 有人知道如何同時獲取簡短信息和長期信息嗎? 非常感謝你!

list = re.findall('(?<=Length:)[\s:\d]+', response.text)      
if len(list) > 0:            
    data['Length'] = list[0]        
else:            
    data['Length'] = '00:00'

在此處輸入圖片說明

在此處輸入圖片說明

您需要'(?<=Length:)\\s*(\\d\\d[\\s*:\\s*\\d\\d]+)'

嘗試使用此Regex並提取組1中存在的所有內容:

Length\s*:\s*(\d+\s*(?::\s*\d+\s*){1,2})

點擊演示

說明:

  • Length\\s*: -匹配Length字面量,后面盡可能多地出現0+個空格
  • :\\s* -匹配一個:后跟0+空格
  • \\d+\\s* -匹配1+個出現的數字,后跟0+個空格。 我們從第1組的此處開始捕獲文本。我們捕獲直到比賽結束。
  • (?::\\s*\\d+\\s*){1,2} -匹配模式中出現的1或2次(?::\\s*\\d+\\s*)
    • (?:) -表示非捕獲組
    • :\\s* -匹配一個:然后出現0+次空格
    • \\d+ -匹配1+個數字
    • \\s* -匹配0+次出現的空白

替代正則表達式:(無任何組)

(?<=Length:\\s\\s)\\d+\\s*(?::\\s*\\d+\\s*){1,2}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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