Я пытаюсь найти в строке один пробел, окруженный цифрой с каждой стороны. Я построил следующий пример:
library('stringr')
str1 <- "1805.6 1-1 1"
str_locate_all(str1, "\\s+")[[1]]
str_locate_all(str1, "[[:digit:]]\\s[[:digit:]]")[[1]]
Что возвращает:
str_locate_all(str1, "\\s+")[[1]]
start end
[1,] 7 7
[2,] 11 11
str_locate_all(str1, "[[:digit:]]\\s[[:digit:]]")[[1]]
start end
[1,] 6 8
[2,] 10 12
Что я и ожидал увидеть. Теперь сделайте то же самое с другой строкой:
str2 <- "1805.6 1 1 1"
str_locate_all(str2, "\\s+")[[1]]
str_locate_all(str2, "[[:digit:]]\\s[[:digit:]]")[[1]]
Но, похоже, отсутствует одно из пробелов, окруженных цифрами (обратите внимание, что второй шаблон возвращает только 2 записи):
str_locate_all(str2, "\\s+")[[1]]
start end
[1,] 7 7
[2,] 9 9
[3,] 11 11
str_locate_all(str2, "[[:digit:]]\\s[[:digit:]]")[[1]]
start end
[1,] 6 8
[2,] 10 12
Итак, вопрос в том, почему второй шаблон не видит средний пробел и не возвращает строку с 8 10
? Я уверен, что просто не вижу вещей в мышлении regex
.
str_locate_all(str2, "(?=(\\d\\s\\d))")[[1]]
Конец предшествует началу :) - person Pierre L   schedule 24.05.2016