我有一个包含网址的文本文件,这些网址需要替换为打开到新标签页的a
标记。我正在将.txt文件转换为.md文件,并希望可以点击链接。
我在下面显示了(1)MWE,(2)期望输出(3)我最初尝试创建一个函数(我假设这将/可能需要gsub
和sprintf
函数实现):
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;
其他语言的答案不太适合工作
答案 0 :(得分:5)
这适用于您的示例x
,并使用您的repl
方法:
gsub("(http://[^ ]*)", repl('\\1'), x)
或没有repl
方法:
gsub("(http://[^ ]*)", '<a href="\\1" target="_blank">\\1</a>', x)