RegEx Negative Lookahead с повторяющейся строкой - PullRequest
0 голосов
/ 28 мая 2020

У меня есть исходная строка, в которой одна и та же строка повторяется несколько раз. Мне нужно сопоставить последнее вхождение строки (String A) и другую строку (String B). Строка A встречается несколько раз перед строкой B.

Мне не удалось найти, что отрицательный прогноз будет работать.

Перейти к измененной исходной строке

Исходная строка

<a href="Link1">some text 1</a><a href="Link2">some text 2</a><a href="Link3">Required text</a><a href="Link4">some text 4</a>

ПРИМЕЧАНИЕ. Количество вхождений строки A (<a href=) может варьироваться.

Требуемые результаты

Соответствие: <a href="Link3">Required text</a> с группой захвата 1: Link 3

Использование этого шаблона RegEx: <a href="(.+?)".+?>Required text<\/a>

Соответствует:
<a href="Link1">some text 1</a><a href="Link2">some text 2</a><a href="Link3">Required text</a>
Группа захвата 1: Link 1

Вы можете просмотреть настройку здесь: https://regex101.com/r/XsEmXw/1/

Я пробовал много различных отрицательных опережений просмотра, но ни один из них не помог. Например:
<a href="(.+?)"(?!.+?\<a href.+?Required).+?>Required text<\/a>

TIA за вашу помощь.


Исправленная исходная строка

Хорошо, плохо, я слишком упростил исходную строку в приведенном выше описании.
Фактическая исходная строка очень сложна. Вы можете просмотреть его здесь:
https://regex101.com/r/VHrrNj/1/

Ответ, приведенный ниже, очень умен, но, к сожалению, не работает для полного сложного случая: <a href="([^"]*)".+?Read more.+?<\/a>

Пересмотренный требуемый результат

Соответствие:
<a href="https://s2.washingtonpost.com/298378e/5ece9636e6e81b69fea16209/597ba5e59bbc0f6826cfe531/2/10/1db89a19afda3018ce8cfede0cfb6768" style="color: #2a2a2a; font-weight: bold; text-decoration: none;">Read more »</a>

Группа захвата 1: https://s2.washingtonpost.com/298378e/5ece9636e6e81b69fea16209/597ba5e59bbc0f6826cfe531/2/10/1db89a19afda3018ce8cfede0cfb6768

Еще раз спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 мая 2020

Здесь вам не нужен отрицательный прогноз. Вы можете решить эту проблему с помощью этого регулярного выражения:

<a href="([^"]*)"[^>]*>Read more[^<]*<\/a>
...