Как выбрать несколько данных из строк с помощью регулярного выражения
Есть Вот такие строки
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
Каким регулярным выражением нужно воспользоваться, чтобы вытащить такие данные: What regular expression should i use to get:
- DVHrj - Код между /category/ и символом / который идет следом за кодом
- Categ Name - Содержимое тега "а"
- 6 - Содержимое между "(" и "P)"
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
На питоне вероятно проще без регулярок вообще, вот заготовка:
from bs4 import BeautifulSoup
text = '''
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a><span class="category__heading__thin">(201 items)</span><span class="category__heading__thin">(6P)</span>
'''
parser = BeautifulSoup(text, 'html.parser')
for child in parser.find_all():
if child.name == 'a':
print(child.text)
s = child['href'].split('/')
if len(s) > 3:
print(s[2])
elif child.name == 'span':
if child.text.endswith('P)') and len(child.text) > 3:
print(child.text[1:-2])
Вывод:
Categ Name
DVHrj
6
Categ Name
DVHrj
6
Categ Name
DVHrj
6
Автор решения: vsemozhebuty
→ Ссылка
Поскольку вы работаете в браузере, основной парсинг стоит сгрузить на штатный парсер HTML и использовать максимально DOM API — получить сначала чистые значения атрибутов или текстового содержимого нужных элементов, а потом уже эти строки доработать регулярками, это самый надёжный способ. Например, так:
const data1 = Array.from(
document.querySelectorAll('a.category__heading__name'),
a => a.href.replace(/.+\/category\/(.+?)\/.+/, '$1')
);
console.log(data1);
const data2 = Array.from(
document.querySelectorAll('a.category__heading__name'),
a => a.innerText
);
console.log(data2);
const data3 = Array.from(
document.querySelectorAll('span.category__heading__thin + span.category__heading__thin'),
a => a.innerText.replace(/\((.+)P\)/, '$1')
);
console.log(data3);
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a>
<span class="category__heading__thin">(201 items)</span>
<span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a>
<span class="category__heading__thin">(201 items)</span>
<span class="category__heading__thin">(6P)</span>
<a class="category__heading__name" href="/category/DVHrj/categ-name">Categ Name</a>
<span class="category__heading__thin">(201 items)</span>
<span class="category__heading__thin">(6P)</span>