Ruby:解析长字符串

时间:2018-10-20 01:54:30

标签: ruby

字符串具有重复的值-我想按相同顺序提取值

str = %q(
a
a
b
a
)
a = str.split
new_value = a[0]
flip_flop = ""
s1, s2 = "", ""
a.each{|e|
    if e == flip_flop
    s1 << e
    flip_flop = e
else
    s2 << e
    flip_flop = e
end
}
p s1 # should be aaa
p s2 # should be b

期望值:s1应该为“ aaa”,而s2应该为“ b”。 更现实的例子: 字符串=“ xblah \ nxmoreblah \ nyfoo \ nzbar \ nxmoredata \ nxblah”。 预期:“ xblahmoreblah \ nyfoo \ nzbar \ nxmoredatablah”。

String =“ ablah \ namoreblah \ nbfoo \ nablahend” 预期=“ ablahmoreblah \ nfoo \ nablahend”

2 个答案:

答案 0 :(得分:1)

我认为您的原始示例(a,a,b,a) => (a,a,a),(b)并不关心序列,在这种情况下,您可以使用

str.split.group_by(&:itself).values.map(&:join)
 => ["aaa", "b"]

如果您确实关心序列,如您的下一个示例所建议的那样,并且您期望它实际返回(a,a),(b),(a),那么

str.split.chunk{ |n| n }.map {|a| a.last.join}
 => ["aa", "b", "a"] 

答案 1 :(得分:1)

FWIW,Ruby有一个内置的触发器:

pandas

more info