Ich versuche, einen einzelnen Leerraum zu finden, der von einer Ziffer auf jeder Seite in einer Zeichenfolge umgeben ist. Ich habe das folgende Beispiel konstruiert:Warum vermisst diese Regex einen einzelnen Leerraum zwischen zwei Ziffern?
library('stringr')
str1 <- "1805.6 1-1 1"
str_locate_all(str1, "\\s+")[[1]]
str_locate_all(str1, "[[:digit:]]\\s[[:digit:]]")[[1]]
Welche zurück:
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
das ist, was ich zu sehen erwartet. Jetzt die gleiche Sache an eine andere Zeichenfolge zu tun:
str2 <- "1805.6 1 1 1"
str_locate_all(str2, "\\s+")[[1]]
str_locate_all(str2, "[[:digit:]]\\s[[:digit:]]")[[1]]
Aber das scheint einer der Räume von Ziffern umgeben zu verpassen (beachten Sie, dass das zweite Muster gibt nur 2 Einträge):
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
So ist die Frage ist, warum nicht das zweite Muster den mittleren Leerraum sehen, und eine Zeile mit 8 10
zurückgeben? Ich bin mir sicher, dass ich nichts von der Denkweise von regex
sehe.
Die Übereinstimmungen werden verbraucht. Versuchen Sie eine Suche nach überlappenden Regex http://stackoverflow.com/search?q=%5Br%5D+overlapping+regex –
Ich finde diese Ausgabe interessant obwohl 'str_locate_all (str2," (? = (\\ d \\ s \ \ d)) ") [[1]]' Das Ende ist vor dem Anfang :) –