Как выбрать несколько данных из строк с помощью регулярного выражения

Есть Вот такие строки

<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:

  1. DVHrj - Код между /category/ и символом / который идет следом за кодом
  2. Categ Name - Содержимое тега "а"
  3. 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>

→ Ссылка