簡體   English   中英

Ruby Split String使用正則表達式區分字符

[英]Ruby Split string at character difference using regex

我目前正在解決一個問題,該問題涉及按每組字符分割一個字符串。

例如,

"111223334456777" #=> ['111','22','333','44','5','6','777']

我目前的操作方式是使用枚舉器,將每個字符與下一個字符進行比較,然后以這種方式拆分數組。

res = []
str = "111223334456777"
group = str[0]
(1...str.length).each do |i|
  if str[i] != str[i-1]
    res << group
    group = str[i]
  else
    group << str[i]
  end
end
res << group
res #=> ['111','22','333','44','5','6','777']

我想看看是否可以使用正則表達式來執行此操作,這將使此過程更加容易。 我知道我可以將這段代碼放在一個方法中,但是我很好奇是否可以在這里使用正則表達式。

所以我想做的是

str.split(/some regex/)

產生相同的結果。 我想到了積極的前瞻性,但是我不知道如何讓正則表達式認識到字符是不同的。

有誰知道這是否可行?

str = "111333224456777"

str.scan /0+|1+|2+|3+|4+|5+|6+|7+|8+|9+/
  #=> ["111", "333", "22", "44", "5", "6", "777"]

要么

str.scan(/((\d)\2*)/).map(&:first)
  #=> ["111", "333", "22", "44", "5", "6", "777"] 

讀者:可以簡化后者嗎?

chunk_while方法就是您在這里尋找的:

str.chars.chunk_while { |b,a| b == a }.map(&:join)

這將破壞當前字符a與先前字符b不匹配的所有內容。 如果您只想限制數字,則可以進行一些預處理。

Enumerable中有很多非常方便的方法值得探索,並且每個新版本的Ruby似乎都添加了更多方法。

另一個利用group_by方法的選項,該方法返回一個散列,其中每個單獨的數字作為鍵,而一個分組數字的數組作為值。

"111223334456777".split('').group_by { |i| i }.values.map(&:join) => => ["111", "22", "333", "44", "5", "6", "777"]

盡管它沒有實現正則表達式,但其他人可能會發現它很有用。

暫無
暫無

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

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