我得到一些像这样的字符串:
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_light
,sky_light
,widesky_dark
并sky_dark
经精密,所以我写了这个:
if my_string.match("widesky_light")
...
end
对于每个变体,但我遇到的问题是因为sky_light
和widesky_light
相似,我的代码无法正常工作。我相信上述解决方案将是正则表达式,但昨天我花了整个下午试图使它正常工作。
有什么建议么?
编辑
一个警告:在此字符串(为例): TFjyg9780878_867978-DGB097908-78679iuhi698_widesky_light_87689uiyhk
,之后的部分widesky_light
,这是_87689uiyhk
可选的,这意味着有时我有它,有时我不这样做,那么解决方案将无法指望_string_
。
这是一个仅与有趣部分匹配的正则表达式:
(?<=_)[a-z_]+(?=(?:_|\b))
这意味着lowercase word with possible underscore inside, between 2 underscores or after 1 underscore and before a word boundary
。如果根据情况需要一些逻辑(宽天空,天空,亮或暗),则可以使用此解决方案。
在这里行动。
如果您仅想了解这4种情况中的任何一种:
(?<=_)(?:wide)?sky_(?:dark|light)(?=(?:_|\b))
在这里,无论有无,都_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
按照这种顺序,case语句应该没问题。widesky_dark
例如,不会匹配两次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句