Разъяснение функциональности Regex / .findall () возвращает совпадения, не входящие в группу захвата - PullRequest
0 голосов
/ 25 февраля 2019

Кажется, я не могу сосредоточиться на регулярных выражениях.

Моя строка:

<h1 id="jdp-title-job-title2">Manager Global E-Commerce (m/f/d)</h1>
<h1 id="jdp-title-job-title"></h1>
<h5>We are looking for a new colleague in ZF Aftermarket’s Global Digital Team at our location in Neuwied.
Req Id: 40112BR</h5>
<h6>Your tasks as Manager Global E-Commerce (m/f/d): </h6>

Первая попытка регулярного выражения

(?<=>).+(?=<)

Использование Lookahead / Back кажется хорошей идеей, потому что это не тегCharaters я не хочу.Это соответствует тому, что мне нужно из строки выше , но

re.findall(r'(?<=>).+(?=<)', s)

возвращает полную строку поиска.Зачем?(установка «. +» в круглых скобках, чтобы сделать его группой захвата, не помогает.

Вторая попытка регулярного выражения

<(h[1-9]).*<\/\1>

был вторым подходом.все это, включая теги. Однако

re.findall(r'<(h[1-9]).*<\/\1>', s)

приводит к

0 = {str} 'h1'
1 = {str} 'h5'
2 = {str} 'h6'

, что неудивительно, поскольку группа захвата 1 окружает только начальные теги. Объединение собранных знаний:

Third Regex Try

<(h[1-9]).*>(.+)<\/\1>

Lookahed / lookbehind не работает с *. Поэтому я попытался сделать часть строки нужной для второй группы захвата. К сожалению, моякод:

re.findall(r'<(h[1-9]).*>(.+)<\/\1>', s)

возвращает полный бред

 0 = {tuple} 
 0 = {str} 'h1'
 1 = {str} '\r <h1 id="jdp-title-job-title">'
 __len__ = {int} 2

 1 = {tuple}  
 0 = {str} 'h5'
 1 = {str} 'We are looking for a new colleague in ZF Aftermarket’s Global 
 Digital Team at our location in Neuwied.\r Req Id: 40112BR'
 __len__ = {int} 2

Есть даже вещи, которые не соответствуют этому регулярному выражению или не являются частью группы захвата или являются многострочными (например,содержание h5). Я не понимаю, что происходит.

Что я хочу

Прежде всего, я хочу понять, что происходит. Во-вторых, мне нужносодержимое, заключенное в теги HTML в приведенной выше строке.

Мой желаемый результат будет выглядеть следующим образом:

0 = {tuple}
0 = {str} 'Manager Global E-Commerce (m/f/d)'

1 = {tuple}
0 = {str} 'Your tasks as Manager Global E-Commerce (m/f/d): '

Бонус: в идеале регулярное выражение совпадает с многострочным содержимым тега h5, но это проблема, которую я готов решить послеОсновная проблема исправлена.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...