Python, использующий Regex, находит строку с динамическим значением в большой строке - PullRequest
0 голосов
/ 20 декабря 2018

У меня очень большая строка, и мне нравится находить в ней небольшую строку или значение (в моем примере 14).Фрагмент этого выглядит следующим образом:

Мне нужно получить 14. Уловка в том, что 78 является динамическим, и я получаю его значение из dict (someDict)

str1='dnas  ANYTHING Here <td class="tr js-name"><a href="/myportal/report/78/abc/xyz/14" title="balh">blah</a></td>'

str2="/myportal/report/"+str(someDict["Id"])+"/abc/xyz/"

p = re.compile(r'str2\s*(.*?)\"')
match = p.search(str1)
if match:
    print(match.group(1))
else:
    print("cant find it")

Я знаю тамчто-то не так с -> p = re.compile(r'str2\s*(.*?)\"'), поскольку я не могу просто вставить str2, как мне использовать компиляцию, пожалуйста

1 Ответ

0 голосов
/ 20 декабря 2018

Строка, которую вы анализируете, выглядит как HTML, регулярные выражения не совсем лучший инструмент для работы .Я хотел бы более специализированный инструмент - HTML-парсер , как BeautifulSoup:

from urllib.parse import urlparse

from bs4 import BeautifulSoup


data = 'dnas  ANYTHING Here <td class="tr js-name"><a href="/myportal/report/78/abc/xyz/14" title="balh">blah</a></td>'

soup = BeautifulSoup(data, "html.parser")
href = soup.select_one("td.tr.js-name > a")["href"]

parsed_url = urlparse(href)
print(parsed_url.path.split("/")[-1])

Печать 14.

Обратите внимание, чтоздесь td.tr.js-name > a - это CSS-селектор , который является одним из методов, которые вы могли бы использовать для поиска элементов в HTML:

  • > обозначает direct * 1022Отношения * parent-> child
  • td.tr.js-name будут соответствовать элементу td, имеющему tr и js-name значения класса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...