Я ищу элегантный способ возврата обратных ссылок с использованием регулярных выражений в R. Позвольте мне объяснить:
Допустим, я хочу найти строки, которые начинаются с названия месяца:
x <- c("May, 1, 2011", "30 June 2011")
grep("May|^June", x, value=TRUE)
[1] "May, 1, 2011"
Это работает, но я действительно хочу выделить месяц (т. Е. "Май", а не всю совпавшую строку.
Таким образом, можно использовать gsub
, чтобы вернуть обратную ссылку, используя substitute
Параметр. Но это имеет две проблемы:
- Вы должны обернуть шаблон внутри ". * (pattern). *)", чтобы подстановка произошла во всей строке.
- Вместо того, чтобы возвращать NA для несопоставленных строк,
gsub
возвращает исходную строку.Это явно не то, что я хочу:
Код и результаты:
gsub(".*(^May|^June).*", "\\1", x)
[1] "May" "30 June 2011"
Я мог бы, вероятно, кодировать обходной путь, выполняя все виды дополнительных проверок, но это быстро становится оченьгрязный.
Чтобы быть кристально чистым, желаемые результаты должны быть:
[1] "May" NA
Есть ли простой способ достичь этого?