Добавление ячеек в R на основе регулярного выражения lookahead, совпадающего со всей строкой - PullRequest
0 голосов
/ 01 июня 2018

Я все еще новичок в R и регулярных выражениях, но я пытаюсь добиться следующего;Предположим, у меня есть таблица данных следующего вида:

Title               | URL
stackoverflow.com   | https://stackoverflow.com
google.com          | http://
youtube.com         | https://youtube.com
overclock.net       | https://

Я хочу добавить ячейки в столбце URL с соответствующим значением в столбце Title, в случае, если URL состоит только изhttp:// или https://, поэтому желаемый результат будет выглядеть следующим образом:

Title               | URL
stackoverflow.com   | https://stackoverflow.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)

Но ничего из вышеперечисленного не даетжелаемый вывод.Проблема в том, что он вообще ничего не добавляет / не заменяет, возможно, потому что регулярное выражение ничего не совпадает или также совпадает, если имеется больше данных, чем просто http: // или https: // present, т.е.также совпадают по полному доменному имени (которое я не хочу)Как мне настроить свой код так, чтобы он выдавал желаемый результат, учитывая приведенный выше пример ввода?

Спасибо!

1 Ответ

0 голосов
/ 02 июня 2018
url.col <- c("https://stackoverflow.com", 
             "http://", 
             "https://youtube.com", 
             "https://")

title.col <- c("stackoverflow.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://stackoverflow.com" 
[2] "http://google.com"        
[3] "https://youtube.com"       
[4] "https://overclock.net" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...