鑑於字符串:識別空白VS其它字符在字符串運行
strs = [
"foo",
" ",
"Hello \n there",
" Ooh, leading and trailing space! ",
]
我想要一個簡單的方法識別的空白和非空白字符所有連續運行,以便與運行是否是空白沿或不:
strs.each{ |str| p find_whitespace_runs(str) }
#=> [ {k:1, s:"foo"} ],
#=> [ {k:0, s:" "} ],
#=> [ {k:1, s:"Hello"}, {k:0, s:" \n "}, {k:1, s:"World"} ],
#=> [
#=> {k:0, s:" "},
#=> {k:1, s:"Ooh,"},
#=> {k:0, s:" "},
#=> {k:1, s:"leading"},
#=> {k:0, s:" "},
#=> {k:1, s:"and"},
#=> {k:0, s:" "},
#=> {k:1, s:"trailing"},
#=> {k:0, s:" "},
#=> {k:1, s:"space!"},
#=> {k:0, s:" "},
#=> ]
這幾乎工作,但包括一個單一的領導{k:0, s:""}
組每當字符串不以空白開始:
def find_whitespace_runs(str)
str.split(/(\S+)/).map.with_index do |s,i|
{k:i%2, s:s}
end
end
真實世界的動機:編寫a syntax highlighter區分空白和其他非空白代碼中的空白。
出於好奇,爲什麼0/1而不是falsy/truthy? –
@WayneConrad主要是因爲它使第三個例子的結果適合於一行:)另外,從問題的鏈接中可以看出,實際上我調用'each'並將其編入索引到一個標籤數組中。 – Phrogz