簡體   English   中英

Ruby拆分二進制字符串,其中前一個字符與下一個字符不同

[英]Ruby split binary string where the previous character is different from the next one

我想知道如何在Ruby中拆分二進制字符串。 我想在前一個字符與下一個字符不同的地方分割字符串。

例如,如果我有字符串

    @s = "aaaabbabbaa"

我想創建一個字符串數組

    @array[0] = "aaaa"
    @array[1] = "bb"
    @array[2] = "a"
    @array[3] = "bb"
    @array[4] = "aa"

我該怎么辦?

Enumerable#chunk可以做到這一點,但是它在Enumerable上定義-並且String不包含Enumerable。 將其轉換為一個字符數組(並將其粘貼回字符串),例如:

s = "aaaabbabbaa"
p array = s.chars.chunk(&:itself).map{|a| a.last.join} #=>["aaaa", "bb", "a", "bb", "aa"]

您可以對scan使用正則表達式:

@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"]

通過使用兩個環顧四周,在正則表達式上分割時不會丟失任何字符。

使用Enumerable#chunk_while

str = "aaaabbabbaa"
p str.chars.chunk_while(&:==).map(&:join)

輸出: ["aaaa", "bb", "a", "bb", "aa"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM