正则表达式:匹配所有文本、数字、+、_ 和 - 冒号之间的实例,它们不是 URL 的一部分
REGEX: Match all instances of text, digits, + , _ and -, Between colons, which are NOT part of an URL
我想查找并替换(不替换)冒号之间的所有文本实例,例如:
:微笑:
:thumbs_up:
:+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 正则表达式模块进行替换。
我的想法是:
"Ok, I should find any URL and tell the regex to IGNORE any matches that are part of the URL"
所以我有正则表达式来成功匹配任何 URL 这样的:
(http[^\s]+)
这将查找 http 和其他任何内容,直到出现非空白字符或换行符,这将指示 URL。
我还有正则表达式来匹配(包括)冒号之间的文本:
(:[\w+-]+:)
所以...我希望使用负前瞻并像这样组合这两个:
(?!http[^\s]+)(:[\w+-]+:)
这几乎是完美的,但它最终匹配了 URL 的这两个部分:
:新闻:
和
:20190417:
我如何构建此正则表达式以使其匹配文本中的所有位置,除非冒号是 URL 的一部分?
万分感谢!
PS。我一直在使用这个很棒的网站来测试我的模式......
https://regexr.com/
一个选项是让你的正则表达式匹配 URL 模式(在一个组中捕获), 或 匹配包含在 :
中的内容,并且然后你可以替换为第一个捕获的组:
(https?://\S+)|:[\w+-]+:
替换为
这确保 URLS 将保留在文本中的位置(被匹配并替换为它们自己),但是您要删除的冒号部分将被匹配并替换为任何内容。
我想查找并替换(不替换)冒号之间的所有文本实例,例如:
:微笑: :thumbs_up: :+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 正则表达式模块进行替换。
我的想法是: "Ok, I should find any URL and tell the regex to IGNORE any matches that are part of the URL"
所以我有正则表达式来成功匹配任何 URL 这样的: (http[^\s]+)
这将查找 http 和其他任何内容,直到出现非空白字符或换行符,这将指示 URL。
我还有正则表达式来匹配(包括)冒号之间的文本: (:[\w+-]+:)
所以...我希望使用负前瞻并像这样组合这两个: (?!http[^\s]+)(:[\w+-]+:)
这几乎是完美的,但它最终匹配了 URL 的这两个部分: :新闻: 和 :20190417:
我如何构建此正则表达式以使其匹配文本中的所有位置,除非冒号是 URL 的一部分?
万分感谢!
PS。我一直在使用这个很棒的网站来测试我的模式...... https://regexr.com/
一个选项是让你的正则表达式匹配 URL 模式(在一个组中捕获), 或 匹配包含在 :
中的内容,并且然后你可以替换为第一个捕获的组:
(https?://\S+)|:[\w+-]+:
替换为
这确保 URLS 将保留在文本中的位置(被匹配并替换为它们自己),但是您要删除的冒号部分将被匹配并替换为任何内容。