Найдите домены, за которыми не следует закрывающий тег span

Я пытаюсь регулярно использовать домены из текста. Я хочу игнорировать домены, за которыми следует тег </span>.

Например, учитывая следующий ввод:

matchme.com<span>dontmatchme.com</span>

Я хотел бы, чтобы мои совпадения содержали один элемент:

matchme.com

Я пробовал следующее:

(?:[A-Za-z0-9|-]+\.*[A-Za-z0-9|-]+\.[a-z]+)(?!<\/span)

Проблема с вышеизложенным заключается в том, что отрицательный просмотр просто означает, что второй элемент во входных данных обрезан и по-прежнему считается действительным:

matchme.com
dontmatchme.co

У меня есть регулярное выражение101 здесь https://regex101.com/r/FpWomQ/1


person Jimmy Sanchez    schedule 21.07.2018    source источник
comment
какие-либо отзывы о понижении?   -  person Jimmy Sanchez    schedule 21.07.2018
comment
Нег. просмотр вперед выполняется между .co m, потому что впереди нет </span. Вам понадобятся притяжательные квантификаторы (недоступные в регулярном выражении Python) или добавление границы слова \b. Посмотрите обновленную демонстрацию.   -  person bobble bubble    schedule 21.07.2018


Ответы (2)


Вы можете использовать следующее регулярное выражение:

[a-z.]+(?=<\/span>)|([a-z.]+)(?=<[\/a-z]+>)

Регулярное выражение использует чередование только для захвата доменов, за которыми не следует </span>.

  • [a-z.]+ Найдите как можно больше букв или . символов.
  • (?=<\/span>) Положительный прогноз для </span>.
  • | Чередование (ИЛИ).
  • ([a-z.]+) Группа захвата. Сопоставьте как можно больше букв или . символов.
  • (?=<[\/a-z]+>) Положительный просмотр вперед для открывающей скобки <, буквенных символов или косой черты /, закрывающей скобки >.

Требуемое совпадение содержится в группе захвата. Вы можете попробовать регулярное выражение в реальном времени здесь.

person Paolo    schedule 21.07.2018

Не могли бы вы изменить регулярное выражение, чтобы игнорировать строки, начинающиеся с <, если да, вы можете использовать это регулярное выражение

^[^<]*$

Это означает, что он будет соответствовать любой строке, которая не начинается с <.

person Misantorp    schedule 21.07.2018
comment
Спасибо за отзыв. Я обновил вопрос, чтобы отразить тот факт, что я не могу рассчитывать на разрывы строк. Я разбираю HTML и бывают случаи, когда нет разрывов строк. - person Jimmy Sanchez; 21.07.2018