как я зацикливаю re.search для следующих данных

У меня есть 2 набора данных, которые я сканировал из таблицы html, используя выражение регулярного выражения

данные:

<div class = "info"> <div class="name"><td>random</td></div> <div class="hp"><td>123456</td></div> <div class="email"><td>random@mail.com</td></div> </div> <div class = "info"> <div class="name"><td>random123</td></div> <div class="hp"><td>654321</td></div> <div class="email"><td>random123@mail.com</td></div> </div> 

регулярное выражение:

 matchname = re.search('\<div class="name"><td>(.*?)</td>' , match3).group(1) matchhp = re.search('\<div class="hp"><td>(.*?)</td>' , match3).group(1) matchemail = re.search('\<div class="email"><td>(.*?)</td>' , match3).group(1) 

поэтому с помощью регулярного выражения я могу вынуть

 random 123456 random@mail.com 

поэтому после сохранения этого набора данных в моей базе данных я хочу сохранить следующий набор, как получить следующий набор данных? я попытался использовать findall, а затем вставить в свой db, но все было в 1 строке. Мне нужно, чтобы данные находились в наборе db, заданном set.

Новое на python, пожалуйста, прокомментируйте, какая часть неясна, попытается отредактировать

  • pandas применяют regex для замены значений
  • Поиск в Regex для извлечения float из строки. питон
  • Перекрытие совпадений с finditer () в Python
  • Проблема с регулярными выражениями в python
  • Python re соответствует только буквам из слова
  • Разделение строк в требуемом формате, Pythonic? (с или без Regex)
  • Естественная сортировка Python
  • Как обрабатывать кодировку ответа из urllib.request.urlopen ()
  • 2 Solutions collect form web for “как я зацикливаю re.search для следующих данных”

    Вы не должны анализировать HTML с регулярным выражением. Это просто беспорядок, сделай это с BS4. Делать это правильно:

     soup = BeautifulSoup(match3, "html.parser") names = [] allTds = soup.find_all("td") for i,item in enumerate(allTds[::3]): # firstname hp email names.append((item.text, allTds[(i*3)+1].text, allTds[(i*3)+2].text)) 

    И, чтобы ответить на заданный вопрос, я думаю, что я включу ужасное уродливое регулярное выражение, которое вы никогда не должны использовать. ESPECIALLY, потому что это html, никогда не используйте regex для разбора html. (пожалуйста, не используйте это)

     for thisMatch in re.findall(r"<td>(.+?)</td>.+?<td>(.+?)</td>.+?<td>(.+?)</td>", match3, re.DOTALL): print(thisMatch[0], thisMatch[1], thisMatch[2]) 

    Как отметил @Racialz, вы должны изучить использование парсеров HTML вместо регулярных выражений .

    Давайте возьмем BeautifulSoup а также @Racialz, но построим более надежное решение. Найдите все элементы info и найдите все поля внутри производящего список словарей на выходе:

     from pprint import pprint from bs4 import BeautifulSoup data = """ <div> <div class = "info"> <div class="name"><td>random</td></div> <div class="hp"><td>123456</td></div> <div class="email"><td>random@mail.com</td></div> </div> <div class = "info"> <div class="name"><td>random123</td></div> <div class="hp"><td>654321</td></div> <div class="email"><td>random123@mail.com</td></div> </div> </div> """ soup = BeautifulSoup(data, "html.parser") fields = ["name", "hp", "email"] result = [ {field: info.find(class_=field).get_text() for field in fields} for info in soup.find_all(class_="info") ] pprint(result) 

    Печать:

     [{'email': 'random@mail.com', 'hp': '123456', 'name': 'random'}, {'email': 'random123@mail.com', 'hp': '654321', 'name': 'random123'}] 
    Python - лучший язык программирования в мире.