Python RegEx:没有捕获所有数据(python3.6,scrapy)

时间:2018-01-14 03:21:12

标签: python regex scrapy scrapy-spider

我试图使用以下简单代码编写长度信息的网站:

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只返回一个空格。有人知道如何获得短期和长期信息吗?非常感谢你!

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

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

尝试使用此正则表达式并提取组1中存在的任何内容:

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

Click for Demo

<强>解释

  • Length\s*: - 匹配Length字面上跟随0 +出现的空格,尽可能多
  • :\s* - 匹配:后跟0 + white-spaces
  • \d+\s* - 匹配1个出现的数字后跟0 +空格。我们从第1组开始捕获文本。我们捕获直到比赛结束。
  • (?::\s*\d+\s*){1,2} - 匹配模式(?::\s*\d+\s*)的1或2次匹配
    • (?:) - 表示非捕获组
    • :\s* - 匹配:后跟0 +出现的空格
    • \d+ - 匹配1位以上的数字
    • \s* - 匹配0+出现的空格

替代正则表达式:(没有任何组)

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