Поиск…


Вступление

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"

Давайте объясним регулярное выражение:

  1. (\\d+) : группа 1, ограниченная (), и находит любую цифру (по крайней мере одну). Помните, что нам нужно использовать двойную обратную косую черту ( \\ ) здесь, потому что для символьной переменной обратная косая черта представляет собой специальный escape-символ для литеральных разделителей строк ( \" или \' ). \d\ эквивалентен: [0-9] .
  2. , : Знак пунктуации: , (мы можем включать пробелы или любой другой разделитель)
  3. \\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"
> 

Затем вышеуказанный шаблон включает в качестве конкретного случая дублированный разряд.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow