如何在Ruby中拆分文本而不创建空字符串?

B S*_*ven 6 ruby string parsing split ruby-on-rails

分割空白,句号,逗号或双引号,而不是单引号:

str = %Q{this is the.string    to's split,real "ok" nice-like.}
str.split(/\s|\.|,|"/)
=> ["this", "is", "the", "string", "", "", "", "to's", "split", "real", "", "ok", "", "nice-like"]
Run Code Online (Sandbox Code Playgroud)

如何雄辩地删除空字符串?

如何雄辩地删除短于MIN_LENGTH的字符串?

Tob*_*hen 8

我对问题域并不完全清楚,但如果你只想避免空字符串,为什么不拆分一次或多次出现的分隔符呢?

str.split /[\s\.,"]+/
Run Code Online (Sandbox Code Playgroud)


saw*_*awa 7

split在这种情况下,使用的想法是不对的.你应该使用scan.

str = %Q{this is the.string    to's split,real "ok" nice-like.}
str.scan(/[\w'-]+/)
# => ["this", "is", "the", "string", "to's", "split", "real", "ok", "nice-like"]
Run Code Online (Sandbox Code Playgroud)

为了匹配MIN_LENGTH或更长的字符串,请执行以下操作:

MIN_LENGTH = 3
str.scan(/[\w'-]{#{MIN_LENGTH},}/)
# => ["this", "the", "string", "to's", "split", "real", "nice-like"]
Run Code Online (Sandbox Code Playgroud)

何时使用拆分,何时使用扫描

  • 当分隔符混乱并使正则表达式匹配时,使用它们很困难scan.
  • 当要提取的子字符串混乱并使正则表达式匹配时,很难使用split.
  • 当你想在要提取的子串的形式上施加条件时,你scan.
  • 如果要在分隔符的形式上施加条件,请使用split.


Nik*_*hil 6

我认为一个简单的方法如下:

str.split(/\s|\.|,|"/).select{|s| s.length >= MIN_LENGTH}
Run Code Online (Sandbox Code Playgroud)