Посчитайте, сколько пробелов начинается строка - PullRequest
2 голосов
/ 14 апреля 2020

Я хочу знать, с какого количества пробелов начинается строка. Вот несколько примеров:

string.1 <- "    starts with 4 spaces"
string.2 <- "  starts with only 2 spaces" 

Моя попытка была следующей, но это приводит к 1 в обоих случаях, и я понимаю, почему это так.

stringr::str_count(string.1, "^ ")
stringr::str_count(string.2, "^ ")

Я бы предпочел, если бы было решение, полностью подобное этому, но с другим регулярным выражением.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Один из подходов может состоять в том, чтобы взять nchar входной строки, со всем содержимым от первого непробельного символа до конца.

string.1 <- "    starts with 4 spaces"
nchar(sub("\\S.*$", "", string.1))
2 голосов
/ 14 апреля 2020

Шаблон ^ соответствует одному пробелу в начале строки, поэтому оба тестовых примера возвращают 1.

Чтобы сопоставить последовательные пробелы в начале строки, вы можете использовать

stringr::str_count(string.1, "\\G ") 

Или, для подсчета любых пробелов,

stringr::str_count(string.1, "\\G\\s") 

См. Демонстрационную версию R

Шаблон \G соответствует пробелу в начало и каждый пробел после успешного совпадения из-за якоря \G .

Другой подход: подсчитать длину совпадений ^\s+ (1 или более пробельных символов в начале строка):

strings <- c("    starts with 4 spaces", "  starts with only 2 spaces")
matches <- regmatches(strings, regexpr("^\\s+", strings))
sapply(matches, nchar)
# =>    4    2 
...