簡體   English   中英

Python-使用Regex查找多個匹配項並按特定順序報告

[英]Python - Using Regex to find multiple matches and report in a certain order

我正在嘗試從HTML源文件中提取一些行。 下面的一個被簡化,但是是相同的想法。 使用下面的示例,我試圖使其以數字順序輸出...即表格1,表格2,表格3,表格4。問題是第二個循環在第二輪重新開始。 這樣我得到:Form 1,Form 2,Form 3,Form2。如何進行編輯,以便第二個循環繼續提取Form 4文本?

import re

line = 'bla bla bla<form>Form 1</form> some text...<form1>Form 
2</form1> more text?bla bla bla<form>Form 3</form> some text...
<form1>Form 4</form1> more text?'

for match in re.finditer('<form>(.*?)</form>', line, re.S):
  print match.group(1)
  for match1 in re.finditer('<form1>(.*?)</form1>', line, re.S):
    print match1.group(1)
    break
for match in re.finditer('<form1?>(.*?)</form1?>', line, re.S):
    print(match.group(1))

我修改代碼:

for match in re.finditer('(<form>(.*?)</form>)|(<form1>(.*?)</form1>)', line, re.S):
    if None != match.group(4):
        print(match.group(4))
    else:
        print(match.group(2))

返回的match對象具有start方法,該方法獲取所需組的索引,並在字符串(即line )中返回匹配組的起始索引。 然后你就可以讓內環路到該索引處開始,而不是開始的line通過分割line (如line[some_index:] )。 一種更合適,更簡單的方法是只讓您的內部re.finditer使用match.group(1)而不是line

但是,除非目標HTML的模式足夠簡單,否則手動處理HTML通常不是一個好主意。 您可以使用一些易於使用的高級庫來解析和提取HTML中的數據。

這是你想要的嗎?

>>> for item in re.finditer(r'<form[12]?>([^<]+)',line):
...     item.groups()[0]
...     
'Form 1'
'Form 2'
'Form 3'
'Form 4'

如果是這樣,請不要告訴任何人,將正則表達式用於HTML是我的主意。

暫無
暫無

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

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