文字列の各桁に囲まれた空白を1つ見つけようとしています。なぜこの正規表現は2桁の間に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
私が見て期待したものです:返す
library('stringr')
str1 <- "1805.6 1-1 1"
str_locate_all(str1, "\\s+")[[1]]
str_locate_all(str1, "[[:digit:]]\\s[[:digit:]]")[[1]]
:私は、次の例を構築してきました。今、別の文字列に同じことを実行します。
str2 <- "1805.6 1 1 1"
str_locate_all(str2, "\\s+")[[1]]
str_locate_all(str2, "[[:digit:]]\\s[[:digit:]]")[[1]]
しかし、これは、(第二のパターンは2つのだけのエントリを返すことに注意してください)数字に囲まれたスペースの1つを欠場するようだ:だから
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
の考え方から物事を見ていないと確信しています。
マッチが消費されます。 regexをオーバーラップさせるための検索を試してください。http://stackoverflow.com/search?q=%5Br%5D+overlapping+regex –
この出力は興味深いものですが、 'str_locate_all(str2、"(?=(\\ d \\ s \ \ d)) ")[[1]]'終わりは始まりの前です:) –