用html url替换所有文本URL

时间:2014-01-08 20:45:41

标签: regex r

我有一个包含网址的文本文件,这些网址需要替换为打开到新标签页的a标记。我正在将.txt文件转换为.md文件,并希望可以点击链接。

我在下面显示了(1)MWE,(2)期望输出(3)我最初尝试创建一个函数(我假设这将/可能需要gsubsprintf函数实现):

MWE:

x <- c("content here: http://stackoverflow.com/", 
    "still more", 
    "http://www.talkstats.com/ but also http://www.r-bloggers.com/", 
    "http://htmlpreview.github.io/?https://github.com/h5bp/html5-boilerplate/blob/master/404.html"
)

**所需的输出:**

> x
[1] "content here: <a href="http://stackoverflow.com/" target="_blank">http://stackoverflow.com/</a>"                                                     
[2] "still more"                                                                                  
[3] "<a href="http://www.talkstats.com/" target="_blank">http://www.talkstats.com/</a> but also <a href="http://www.r-bloggers.com/" target="_blank">http://www.r-bloggers.com/</a>"                               
[4] "<a href="http://htmlpreview.github.io/?https://github.com/h5bp/html5-boilerplate/blob/master/404.html" target="_blank">http://htmlpreview.github.io/?https://github.com/h5bp/html5-boilerplate/blob/master/404.html</a>"

初步尝试解决:

repl <- function(x) sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", x, x)
gsub("http.", repl(), x)

使用"http.\\s"作为正则表达式的一个角落是,字符串可能不会像x[3]中那样在空格中结束,或者网址包含http,这不仅仅是x[4]解析一次(如{{1}}所示)。

请注意 R REGEX特定于R;
其他语言的答案不太适合工作

1 个答案:

答案 0 :(得分:5)

这适用于您的示例x,并使用您的repl方法:

gsub("(http://[^ ]*)", repl('\\1'), x)

或没有repl方法:

gsub("(http://[^ ]*)", '<a href="\\1" target="_blank">\\1</a>', x)