Как выкинуть пробелы и подчеркивания только с начала строки? - PullRequest
1 голос
/ 17 мая 2019

Я хочу игнорировать пробелы и подчеркивания в начале строки в R.

Я могу написать что-то вроде

txt <- gsub("^\\s+", "", txt)
txt <- gsub("^\\_+", "", txt)

Но я думаю, что может быть элегантное решение

txt <- "  9PM   8-Oct-2014_0.335kwh  "
txt <- gsub("^[\\s+|\\_+]", "", txt)
txt

Вывод должен быть "9PM 8-Oct-2014_0.335kwh ". Но мой код дает " 9PM 8-Oct-2014_0.335kwh ".

Как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 17 мая 2019

Вы можете связать \s и подчеркивание только в классе символов и использовать квантификатор , чтобы повторить это 1+ раз.

^[\s_]+

Regex demo

Например:

txt <- gsub("^[\\s_]+", "", txt, perl=TRUE)

Или как @ Tim Biegeleisen указывает в комментарии, если заменяется только первое вхождение, вы можете использовать вместо него sub:

txt <- sub("[\\s_]+", "", txt, perl=TRUE)

Или с использованием класса символов POSIX

txt <- sub("[[:space:]_]+", "", txt)

Дополнительная информация о perl=TRUE и регулярных выражениях, используемых в R

R демо

0 голосов
/ 17 мая 2019

Пакеты stringr предлагают некоторые специфические для задачи функции с полезными именами. В исходном вопросе вы говорите, что хотели бы удалить пробелы и подчеркивания в начале вашей строки, но в комментарии вы подразумеваете, что вы также хотите удалить те же символы в конце той же строки. Для этого я добавлю несколько разных вариантов.

Заданная строка s <- " \t_blah_ ", которая содержит пробелы (пробелы и символы табуляции) и подчеркивания:

library(stringr)

# Remove whitespace and underscores at the start.
str_remove(s, "[\\s_]+")
# [1] "blah_ "

# Remove whitespace and underscores at the start and end.
str_remove_all(s, "[\\s_]+")
# [1] "blah"

В случае, если вы хотите удалить только пробелы только - в конце концов, в начале или конце строки примера нет подчеркиваний - есть пара stringr функций, которые помогут Вы держите вещи простыми:

# `str_trim` trims whitespace (\s and \t) from either or both sides.
str_trim(s, side = "left")
# [1] "_blah_ "

str_trim(s, side = "right")
# [1] "  \t_blah_"

str_trim(s, side = "both") # This is the default.
# [1] "_blah_"

# `str_squish` reduces repeated whitespace anywhere in string. 
s <- "  \t_blah     blah_ "
str_squish(s)
# "_blah blah_"

Тот же самый шаблон [\\s_]+ также будет работать в базовых R sub или gsub, с некоторыми незначительными изменениями, если это ваш джем (см. Thefourthbird`s ответ ).

0 голосов
/ 17 мая 2019

Вы можете использовать stringr как:

txt <- " 9PM 8-Oct-2014_0.335kwh "
library(stringr)
str_trim(txt)
[1] "9PM 8-Oct-2014_0.335kwh"

или trimws в базе R

trimws(txt)
[1] "9PM 8-Oct-2014_0.335kwh"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...