我想在冒号之间找到并替换(没有任何)文本的所有实例,例如:
:smile :: thumbs_up :: + 1:: - 1:
但不是如果冒号是网址的一部分,例如这个网址:http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa
如您所见,此URL有几个冒号,应忽略任何此类匹配。
完整的文本也可以在之前和之后都有一些文本。此外,这些也可以连续出现,中间没有任何空格。例如:
我正在浏览并发现这个网址:微笑:http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa这太棒了:微笑:: + 1:记住:不要忘记upvote!
我希望结果如下:
我正在浏览并发现这个网址http://pdf.reuters.com/htmlnews/htmlnews.asp?i=43059c3bf0e37541&u=urn:newsml:reuters.com:20190417:nPn5XHnXBa它太棒了记住:别忘了upvote!
我正在使用python regex模块进行替换。
我的想法是:“好的,我应该找到任何URL并告诉正则表达式IGNORE任何属于URL的匹配”
所以我有正则表达式成功匹配任何URL如下:(http [^ \ s] +)
这将找到http和其他任何内容,直到非空白字符或换行符,这将指示URL的结尾。
我也有正则表达式来匹配(包括)冒号之间的文本:(:[\ w + - ] + :)
所以...我希望使用负向前瞻并将这两个结合起来:(?!http [^ \ s] +)(:[\ w + - ] + :)
这几乎是完美的,但最终匹配URL的这两部分:: newsml:和:20190417:
我如何构建这个正则表达式,使其匹配文本中的任何位置,如果冒号是URL的一部分除外?
太感谢了!
PS。我一直在使用这个很棒的网站来测试我的模式... https://regexr.com/
一种选择是使您的正则表达式匹配URL模式(在组中捕获),或匹配:
s中包含的内容,然后您可以替换为第一个捕获的组:
(https?://\S+)|:[\w+-]+:
用。。。来代替
\1
这可以确保URLS将保留在文本中的位置(匹配并替换为自己),但是要删除的冒号部分将匹配并替换为空。