REGEX: сопоставить все вхождения текста, цифры, +, _ и - между двоеточиями, которые НЕ являются частью URL - PullRequest
1 голос
/ 19 апреля 2019

Я бы хотел найти и заменить (ни с чем) все вхождения текста между двоеточиями, например:

: улыбка: :пальцы вверх: : +1: : -1:

но НЕ, если двоеточия являются частью URL, например, вот этот URL: http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa

Как видите, этот URL имеет несколько двоеточий, и любые такие совпадения следует игнорировать.

Полный текст может содержать текст до и после. Кроме того, они также могут отображаться последовательно, без пробелов между ними. Например:

Я просматривал и нашел этот URL: smile: http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa это фантастика: smile :: + 1: Помните: не забудьте поднять голос!

Я ожидаю, что результат будет:

Я просматривал и нашел этот URL http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa это фантастика Помните: не забудьте поднять голос!

Я использую модуль регулярных выражений Python для своих замен.

Я думаю: «Хорошо, я должен найти любой URL и сообщить регулярному выражению IGNORE о любых совпадениях, которые являются частью URL» *

Итак, у меня есть регулярное выражение для успешного сопоставления любого URL как такового: (HTTP [^ \ s] +)

Это позволит найти http и все остальное до непробельного символа или символа новой строки, который будет указывать на конец URL.

У меня также есть регулярное выражение для сопоставления текста между (включая) двоеточиями: (: [\ W + -] +:)

ТАК ... Я надеялся использовать негативную перспективу и объединить эти 2 следующим образом: (?! HTTP [^ \ s] +) (: [\ ш + -] +:)

Это ПОЧТИ идеально, но в итоге оно соответствует этим двум частям URL: : NewsML: а также : 20190417:

Как я могу построить это регулярное выражение так, чтобы оно совпадало с текстом в любом месте, кроме случаев, когда двоеточия являются частью URL?

Спасибо за миллион!

PS. Я использовал этот удивительный сайт, чтобы проверить мои шаблоны ... https://regexr.com/

1 Ответ

0 голосов
/ 19 апреля 2019

Один из вариантов заключается в том, чтобы ваше регулярное выражение совпадало с шаблоном URL (захваченным в группе), или совпадает с чем-то, заключенным в : с, и затем вы можете заменить его первой захваченной группой:

(https?://\S+)|:[\w+-]+:

заменить на

\1

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

https://regex101.com/r/d7mM1s/2

...