R Language
Изменение строк путем замены
Поиск…
Вступление
sub
и gsub
используются для редактирования строк с использованием шаблонов. См. « Согласование образцов и замена» для получения дополнительных сведений о связанных функциях и регулярных выражениях для создания шаблона.
Переупорядочить строки символов, используя группы захвата
Если вы хотите изменить порядок строк символов, вы можете использовать круглые скобки в pattern
для группировки частей строки вместе. Эти группы могут в аргументе replacement
быть добавлены с использованием последовательных чисел.
В следующем примере показано, как вы можете переупорядочить вектор имен формы «фамилия, имя» в вектор формы «имя фамилии».
library(randomNames)
set.seed(1)
strings <- randomNames(5)
strings
# [1] "Sigg, Zachary" "Holt, Jake" "Ortega, Sandra" "De La Torre, Nichole"
# [5] "Perkins, Donovon"
sub("^(.+),\\s(.+)$", "\\2 \\1", strings)
# [1] "Zachary Sigg" "Jake Holt" "Sandra Ortega" "Nichole De La Torre"
# [5] "Donovon Perkins"
Если вам нужна только фамилия, вы можете просто обратиться к первым парам круглых скобок.
sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg" "Holt" "Ortega" "De La Torre" "Perkins"
Устранение дублированных последовательных элементов
Предположим, мы хотим исключить дублированный элемент подпоследовательности из строки (ее может быть несколько). Например:
2,14,14,14,19
и преобразовать его в:
2,14,19
Используя gsub
, мы можем добиться этого:
gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"
Он работает также для нескольких повторений, например:
> gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"
Давайте объясним регулярное выражение:
-
(\\d+)
: группа 1, ограниченная (), и находит любую цифру (по крайней мере одну). Помните, что нам нужно использовать двойную обратную косую черту (\\
) здесь, потому что для символьной переменной обратная косая черта представляет собой специальный escape-символ для литеральных разделителей строк (\"
или\'
).\d\
эквивалентен:[0-9]
. -
,
: Знак пунктуации:,
(мы можем включать пробелы или любой другой разделитель) -
\\1
: идентичная строка для группы 1, т. Е. Повторяющееся число. Если этого не произойдет, то шаблон не соответствует.
Попробуем аналогичную ситуацию: устраним последовательные повторяющиеся слова:
one,two,two,three,four,four,five,six
Затем просто замените \d
на \w
, где \w
соответствует любому символу слова, включая: любую букву, цифру или подчеркивание. Это эквивалентно [a-zA-Z0-9_]
:
> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
>
Затем вышеуказанный шаблон включает в качестве конкретного случая дублированный разряд.