【问题标题】:Matching Portions of A String to Elements of an Array in Ruby将字符串的一部分与 Ruby 中的数组元素匹配
【发布时间】:2013-12-19 20:28:54
【问题描述】:

我有一个字符串和一个数组,并试图遍历数组以查看其任何元素是否与字符串的一部分匹配。

string = "HOPJYJKCONNECTICUTQZIDAHOKR"

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]

如何遍历 states_array 以便在字符串中找到所有匹配项?我想将所有匹配的状态输出为一个数组 & 所以最终结果可能如下所示:

#=> ["CONNECTICUT", "IDAHO"]

【问题讨论】:

  • 应该是"TEXAS","ALASKA", 而不是"TEXAS,""ALASKA,"
  • 您的评论中有语法错误...严重吗?
  • @PeterAlfvin 我在问题中指的是#=> ["CONNECTICUT", "IDAHO"]
  • WPeter Alfvin 字符串定义结束后有逗号。
  • @PeterAlfvin 哎呀没关系,我指的是别的东西,但它得到了修复(steenslag 的第一条评论)

标签: ruby regex arrays match


【解决方案1】:
string = "HOPJYJKCONNECTICUTQZIDAHOKR"
states = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]

states.select { |s| string[s] }
# => ["IDAHO", "CONNECTICUT"]

【讨论】:

  • 优秀。谢谢你。对此的新手&不确定我是否必须在将数组的每个元素与字符串匹配之前对其进行迭代。非常感谢!
【解决方案2】:

Matt 的解决方案不错,但也可以完成

states.select { |s| string.match(s)}

【讨论】:

  • states.select { |s| string.include? s },但基本上是一样的。
【解决方案3】:

由于您在此问题上指定了正则表达式标签,因此您可以使用正则表达式,如下所示:

string.scan(Regexp.new(states.join('|')))
# => ["CONNECTICUT", "IDAHO"] 

使用马特回答中的变量。不过不推荐这个。 :-)

【讨论】:

  • 优点:(1) OP 确实指定了正则表达式。 (2) 这以与 OP 相同的顺序给出答案。 +1
  • 谢谢,但不确定您所说的“与 OP 相同的顺序”是什么意思。事实上,在回顾这个问题时,OP 询问“迭代状态”,这并没有。 ;-)
  • 表示答案["CONNECTICUT", "IDAHO"]的顺序与OP中相同,与string中相同。
  • @Matt 啊,明白了。 :-)
【解决方案4】:

这就像@Peter_Alvin 的回答,使用内置方法union

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"]
str = "HOPJYJKCONNECTICUTQZIDAHOKR"
p str.scan(Regexp.union(states_array)) # ["CONNECTICUT", "IDAHO"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2019-03-20
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2015-03-21
    相关资源
    最近更新 更多