Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby分割二进制字符串,其中前一个字符与下一个不同_Ruby - Fatal编程技术网

Ruby分割二进制字符串,其中前一个字符与下一个不同

Ruby分割二进制字符串,其中前一个字符与下一个不同,ruby,Ruby,我想知道如何在Ruby中拆分二进制字符串。 我想分割上一个字符与下一个字符不同的字符串 例如,如果我有字符串 @s = "aaaabbabbaa" 我想创建一个字符串数组 @array[0] = "aaaa" @array[1] = "bb" @array[2] = "a" @array[3] = "bb" @array[4] = "aa" 我怎么能做到这一点呢?做到了这一点,但它是在Enumerable上定义的,字符串不包括Enumerabl

我想知道如何在Ruby中拆分二进制字符串。 我想分割上一个字符与下一个字符不同的字符串

例如,如果我有字符串

    @s = "aaaabbabbaa"
我想创建一个字符串数组

    @array[0] = "aaaa"
    @array[1] = "bb"
    @array[2] = "a"
    @array[3] = "bb"
    @array[4] = "aa"
我怎么能做到这一点呢?

做到了这一点,但它是在Enumerable上定义的,字符串不包括Enumerable。将其转换为字符数组(并将它们粘回字符串),如:


可以将正则表达式与
scan
一起使用:

@array = @s.scan(/((.)\2*)/).map(&:first)
#=> ["aaaa", "bb", "a", "bb", "aa"]
str=“aaaabbabaa”
r=/
(?[“aaaa”、“a”、“bb”、“b”、“a”、“a”、“bb”、“b”、“aa”、“a”]
通过使用两个Lookaround,在正则表达式上拆分时不会丢失任何字符。

使用


输出:
[“aaaa”、“bb”、“a”、“bb”、“aa”]

您将为数组中的每个项目获得一个额外的字母,可能会在
之前添加
.map(&:pop)
.map(&:join)
帮助。不知道
/x
,很好。@Gerry,
/x
在我看来是记录非平凡正则表达式的最佳方式,但请注意它忽略了空格。例如,
/a b/x
减少为
/ab/
。您必须编写
/a[]b/
/a\sb/
来保留空间。为什么要使用
chunk\u而
呢,这需要Ruby v2.3+,而
chunk
更简单,可读性更好,并且支持Ruby的早期版本呢?
chunk\u而
对我来说似乎更直观,因为在编写代码时,我习惯于使用它,我不认为
是为了\u a
i这里有必要。@sagarpandya82是的,谢谢,刚刚注意到它返回可枚举的,因此我们可以直接进行方法链接。您可以在(&:==)时使用快捷方式
chunk\u
@array = @s.scan(/((.)\2*)/).map(&:first)
#=> ["aaaa", "bb", "a", "bb", "aa"]
str = "aaaabbabbaa"

r = /
    (?<=(.))  # match any character in capture group 1, in positive lookbehind
    (?!\1)    # do not match capture group 1, negative lookahead
    /x        # free-spacing regex definition mode

str.split(r)
  #=> ["aaaa", "a", "bb", "b", "a", "a", "bb", "b", "aa", "a"]
str = "aaaabbabbaa"
p str.chars.chunk_while(&:==).map(&:join)