在Ruby字符串中提取模式后的值

时间:2016-08-10 10:35:05

标签: ruby string

我有一个这样的字符串:

"<root><some ProdCode=\"40\" ProducerName=\"demo1\" ProdCode=\"40\" Need_Confirmation=\"1\"/><some ProdCode=\"40\" ProducerName=\"demo1\" ProdCode=\"40\" Need_Confirmation=\"1\"/></root>"

我正在尝试从= \“ content \”之间的字符串中提取内容并将其放入数组中,如[“40”,“demo1”,“40” , “1”,40 ......]

2 个答案:

答案 0 :(得分:2)

您应该使用:scan按regexp模式选择元素。然后删除转义字符。

string.scan(/"[^"]+"/).map { |element| element.delete('\\"')  }

模式说明:

  1. / - regexp启动
  2. " - 第一个字符应为"
  3. [^"]+ - next应该是除"之外的任何字符。 +符号表示此类字符的数量应至少为1。
  4. " - 接下来应该是"
  5. / - 正则表达式结束
  6. 所以string.scan(/"[^"]+"/)会返回:

    ["\"40\"", "\"demo1\"", "\"40\"", "\"1\"", "\"40\"", "\"demo1\"", "\"40\"", "\"1\""]
    

    然后我们可以使用\"方法删除:delete

    构建regexp的便捷工具是http://rubular.com/

答案 1 :(得分:0)

当你的字符串很简单时,你可以像这样使用scan +正则表达式:

result = html.scan(/ ProdCode =“\ d +?”/)

如果它更复杂,你可以使用像nokogiri或oga那样的html解析器。