Я пытаюсь найти одно белое пространство, окруженное цифрой с каждой стороны в строке. Я построил следующий пример:Почему это регулярное выражение пропускает одно пробел между двумя цифрами?
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
Так вопрос в том, почему 2-й шаблон не видит среднее белое пространство и возвращает строку с 8 10
? Я уверен, что я просто не вижу вещей с мышления regex
.
Спички расходуются. Попробуйте найти перекрывающееся регулярное выражение http://stackoverflow.com/search?q=%5Br%5D+overlapping+regex –
Я нахожу этот вывод интересным, хотя 'str_locate_all (str2," (? = (\\ d \\ s \ \ d)) ") [[1]]' Конец перед началом :) –