如何使用Ruby / Rails在字符串中查找特定单词

时间:2016-12-01 10:00:57

标签: ruby-on-rails ruby regex

我有一些像这样的字符串:

TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_light_87689uiyhk

TFjyg9780878_867978-DGB097908-78679iuhi698_sky_light_87689uiyhk

TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_dark_87689uiyhk

TFjyg9780878_867978-DGB097908-78679iuhi698_sky_dark_87689uiyhk

我需要检查上面的字符串是否具有精确的widesky_lightsky_lightwidesky_darksky_dark之一,所以我写了这个:

if my_string.match("widesky_light")
  ...
end 

对于每个变体,但我遇到的问题是因为sky_lightwidesky_light相似,我的代码无法正常工作。我相信上面的解决方案将是一个正则表达式,但我昨天下午花了很多时间试图让它工作。

有什么建议吗?

修改

警告:在此字符串中(例如):TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_light_87689uiyhkwidesky_light之后的部分_87689uiyhk是可选的,这意味着有时我拥有它,有时我不会&# 39; t,因此解决方案无法依靠_string_

3 个答案:

答案 0 :(得分:2)

您似乎只需要重新排序createDataSet(.Object=GroupHandler, datasetname="chrX", type="double", chunksize=4, compression=9, dimensions=c(length(chrX.ranges),length(chrX.ranges)), maxdimensions=c(length(chrX.ranges),length(chrX.ranges))) 语句

if

答案 1 :(得分:1)

也许是这样的:

case my_string
when /_(sky_light)/
  # just sky_light
when /sky_light/
  # widesky_light
when /_(sky_dark)/
  # just sky_dark
when /sky_dark/
  # widesky_dark
else
  puts "I don't like"
end

答案 2 :(得分:1)

的正则表达式

第一个正则表达式:提取单词以进一步检查

这是一个只与有趣部分匹配的正则表达式:

(?<=_)[a-z_]+(?=(?:_|\b))

这意味着lowercase word with possible underscore inside, between 2 underscores or after 1 underscore and before a word boundary。 如果你需要一些逻辑视情况而定(宽阔,天空,明亮或黑暗),你可以使用这个解决方案。

Here正在行动中。

第二个正则表达式:直接检查是否存在4个单词之一

如果您只想知道是否存在4种情况中的任何一种:

(?<=_)(?:wide)?sky_(?:dark|light)(?=(?:_|\b))

Here正在使用_something_after或任何内容。

案例陈述

list = %w(
  TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_light_87689uiyhk
  TFjyg9780878_867978-DGB097908-78679iuhi698_sky_light_87689uiyhk
  TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_dark_87689uiyhk
  TFjyg9780878_867978-DGB097908-78679iuhi698_sky_dark_87689uiyhk
  TFjyg9780878_867978-DGB097908-78679iuhi698_trash_dark_87689uiyhk
)

list.each do |string|
  case string
  when /widesky_light/ then puts "widesky light found!"
  when /sky_light/     then puts "sky light found!"
  when /widesky_dark/  then puts "widesky dark found!"
  when /sky_dark/      then puts "sky dark found!"
  else                      puts "Nothing found!"
  end
end

按此顺序,案例陈述应该没问题。例如,widesky_dark将不会匹配两次。