Регулярное выражение для извлечения URL со сложным форматированием - PullRequest
2 голосов
/ 08 декабря 2011

Мой вопрос похож на этот , но более сложный.

Я пытаюсь найти регулярное выражение для извлечения URL-адресов из текстового документа.Хитрость заключается в том, что некоторые URL-адреса встроены в предложения с более сложным для анализа форматированием.Вот пример текста, из которого я хотел бы извлечь URL:

<p>There are several links of the general format http://www.foo.com/index.html.</p>
<p>There are many websites (e.g. http://www.foo.com/abc/def?a=2&b=3) that end oddly: http://www.foo.com/results</p>

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

Для моих целей точка (и правая круглая скобка) является допустимым символом URL, если толькосамый последний персонаж.Короче говоря, проблема заключается в том, как обращаться с символами, которые являются допустимыми в строке, только если они не являются последним символом в строке.

Мое текущее регулярное выражение, которое не может иметь дело с этим случаем, (вPython):

m = re.findall("((http:|https:)//[^ \<]+)",line)

Есть какие-нибудь мысли по поводу элегантных способов борьбы с этим?

1 Ответ

3 голосов
/ 08 декабря 2011

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

m = re.findall("((http:|https:)//[^ \<]*[^ \<\.])",line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...