基于匹配整个字符串的前瞻性正则表达式在 R 中附加单元格
Appending cells in R based on lookahead regex matching an entire string
我对 R 和正则表达式还是个新手,但我正在努力实现以下目标;假设我有以下类型的数据 table:
Title | URL
whosebug.com | https://whosebug.com
google.com | http://
youtube.com | https://youtube.com
overclock.net | https://
我想将 URL
列中的单元格附加到 Title
列中的相应值,以防 URL
仅包含 http://
或 [=16] =],因此所需的输出如下所示:
Title | URL
whosebug.com | https://whosebug.com
google.com | http://google.com
youtube.com | https://youtube.com
overclock.net | https://overclock.net
为此,我尝试将 sub
函数与前瞻性正则表达式结合使用,如下所示:
dt$URL <- sub("(?:^|\W)https?://(?:$|\W)", "\1", dt$Title, perl = TRUE)
或
dt$URL <- sub("\s(https?://)", "\1", dt$Title, perl = TRUE)
或
dt$URL <- sub("\b(https?://\b)", "\1", dt$Title, perl = TRUE)
但是上面的 none 会产生所需的输出。问题是它根本没有 append/replace 任何东西,可能是因为正则表达式不匹配任何东西,或者如果存在的数据不仅仅是 http:// 或 https://,它也会匹配,即它还将匹配一个完整的域名(我不想要)。根据上面的示例输入,我应该如何调整我的代码以产生所需的输出?
谢谢!
url.col <- c("https://whosebug.com",
"http://",
"https://youtube.com",
"https://")
title.col <- c("whosebug.com",
"google.com",
"youtube.com",
"overclock.net")
ifelse(grepl("^(\w*http(s)?://)$", url.col), # if pattern matches url.col elem:
paste0(url.col, title.col), # join content of cols together and return!
url.col) # but if not return url.col element 'as is'
[1] "https://whosebug.com"
[2] "http://google.com"
[3] "https://youtube.com"
[4] "https://overclock.net"
我对 R 和正则表达式还是个新手,但我正在努力实现以下目标;假设我有以下类型的数据 table:
Title | URL
whosebug.com | https://whosebug.com
google.com | http://
youtube.com | https://youtube.com
overclock.net | https://
我想将 URL
列中的单元格附加到 Title
列中的相应值,以防 URL
仅包含 http://
或 [=16] =],因此所需的输出如下所示:
Title | URL
whosebug.com | https://whosebug.com
google.com | http://google.com
youtube.com | https://youtube.com
overclock.net | https://overclock.net
为此,我尝试将 sub
函数与前瞻性正则表达式结合使用,如下所示:
dt$URL <- sub("(?:^|\W)https?://(?:$|\W)", "\1", dt$Title, perl = TRUE)
或
dt$URL <- sub("\s(https?://)", "\1", dt$Title, perl = TRUE)
或
dt$URL <- sub("\b(https?://\b)", "\1", dt$Title, perl = TRUE)
但是上面的 none 会产生所需的输出。问题是它根本没有 append/replace 任何东西,可能是因为正则表达式不匹配任何东西,或者如果存在的数据不仅仅是 http:// 或 https://,它也会匹配,即它还将匹配一个完整的域名(我不想要)。根据上面的示例输入,我应该如何调整我的代码以产生所需的输出?
谢谢!
url.col <- c("https://whosebug.com",
"http://",
"https://youtube.com",
"https://")
title.col <- c("whosebug.com",
"google.com",
"youtube.com",
"overclock.net")
ifelse(grepl("^(\w*http(s)?://)$", url.col), # if pattern matches url.col elem:
paste0(url.col, title.col), # join content of cols together and return!
url.col) # but if not return url.col element 'as is'
[1] "https://whosebug.com"
[2] "http://google.com"
[3] "https://youtube.com"
[4] "https://overclock.net"