Ruby on rails 正则表达式提取三个单独的值

Ruby on rails 正则表达式提取三个单独的值,ruby-on-rails,ruby,regex,text,Ruby On Rails,Ruby,Regex,Text,我从一个RSS提要中获取了一些XML格式的信息。我需要一些帮助来获取我需要的值 我希望正则表达式可以相当宽松,以防制表符、换行符或空格发生变化,但是,我在正则表达式方面非常糟糕,所以我需要一些帮助 以下是我的文本: \n\t\t\t\t\tMIDDAY DRAW DATE: \t\t\tFriday 10/26/12 \n\t\t\t\t\tMIDDAY WINNING NUMBER:\t\t\t6-9-6-0\n\t\t\t\t\tMIDDAY PAYOUT: \t$4,000.\n\t\t\

我从一个RSS提要中获取了一些XML格式的信息。我需要一些帮助来获取我需要的值

我希望正则表达式可以相当宽松,以防制表符、换行符或空格发生变化,但是,我在正则表达式方面非常糟糕,所以我需要一些帮助

以下是我的文本:

\n\t\t\t\t\tMIDDAY DRAW DATE: \t\t\tFriday 10/26/12 \n\t\t\t\t\tMIDDAY WINNING NUMBER:\t\t\t6-9-6-0\n\t\t\t\t\tMIDDAY PAYOUT: \t$4,000.\n\t\t\t\t\tNEXT MIDDAY DRAW DATE: \tSaturday 10/27/12\n\t\t\t\t
此外,这些
\n\t
字符都是纯文本

我想将每个值提取到单独的变量中,因此:

MIDDAY DRAW DATE
MIDDAY WINNING NUMBER
MIDDAY PAYOUT
NEXT MIDDAY DRAW DATE

如果有人能帮忙,那就太好了

以下方法应该有效:

^\s*MIDDAY DRAW DATE:\s*(.*?)\s*MIDDAY WINNING NUMBER:\s*(.*?)\s*MIDDAY PAYOUT:\s*(.*?)\s*NEXT MIDDAY DRAW DATE:\s*(.*?)\s*$
例如:


您感兴趣的每个值都将位于捕获的组中。

以下操作应有效:

^\s*MIDDAY DRAW DATE:\s*(.*?)\s*MIDDAY WINNING NUMBER:\s*(.*?)\s*MIDDAY PAYOUT:\s*(.*?)\s*NEXT MIDDAY DRAW DATE:\s*(.*?)\s*$
例如:


您感兴趣的每个值都将包含在捕获的组中。

我不太明白您的意思,是不是像“中午抽签日期”=“12月10日星期五”?跟随应该有效

(\\n|\\t)*([\w\s]+(?:\s)?)(\\n|\\t)*([\w\s]+)

我不太明白你的意思,是不是像“中午抽签日”=“12月10日星期五”?跟随应该有效

(\\n|\\t)*([\w\s]+(?:\s)?)(\\n|\\t)*([\w\s]+)
将为您提供:

[
  ["MIDDAY DRAW DATE", "Friday 10/26/12"],
  ["MIDDAY WINNING NUMBER", "6-9-6-0"],
  ["MIDDAY PAYOUT", "$4,000."],
  ["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]
]
[
  ["Friday 10/26/12"],
  ["6-9-6-0"],
  ["$4,000."],
  ["Saturday 10/27/12"]
]
如果只需要不带键的值,则

string.scan(/:\s*(.*?)\s*$/)
将为您提供:

[
  ["MIDDAY DRAW DATE", "Friday 10/26/12"],
  ["MIDDAY WINNING NUMBER", "6-9-6-0"],
  ["MIDDAY PAYOUT", "$4,000."],
  ["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]
]
[
  ["Friday 10/26/12"],
  ["6-9-6-0"],
  ["$4,000."],
  ["Saturday 10/27/12"]
]
将为您提供:

[
  ["MIDDAY DRAW DATE", "Friday 10/26/12"],
  ["MIDDAY WINNING NUMBER", "6-9-6-0"],
  ["MIDDAY PAYOUT", "$4,000."],
  ["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]
]
[
  ["Friday 10/26/12"],
  ["6-9-6-0"],
  ["$4,000."],
  ["Saturday 10/27/12"]
]
如果只需要不带键的值,则

string.scan(/:\s*(.*?)\s*$/)
将为您提供:

[
  ["MIDDAY DRAW DATE", "Friday 10/26/12"],
  ["MIDDAY WINNING NUMBER", "6-9-6-0"],
  ["MIDDAY PAYOUT", "$4,000."],
  ["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]
]
[
  ["Friday 10/26/12"],
  ["6-9-6-0"],
  ["$4,000."],
  ["Saturday 10/27/12"]
]

如果您不需要一行程序,听起来您可以在
/\n\t*/
上拆分字符串以获得每个名称/值对,然后在
:\t+
:\s*
上拆分每个结果以将名称与值分开并修剪空白。在JS中,它类似于:

//JS版本1.8.1或更高版本
var result=input.trim()
.split(/\s*\n\t*/)
.map(函数(el){返回el.split(/:\s*/);});
//测试:
reduce(函数(i,j){returni+',\n'+j;});
编辑:如果您只需要关键点,则更容易:

result = input.match(/[^\t]+(?=:)/g);

如果您不需要一行程序,听起来您可以在
/\n\t*/
上拆分字符串以获得每个名称/值对,然后在
:\t+
:\s*
上拆分每个结果以将名称与值分开并修剪空白。在JS中,它类似于:

//JS版本1.8.1或更高版本
var result=input.trim()
.split(/\s*\n\t*/)
.map(函数(el){返回el.split(/:\s*/);});
//测试:
reduce(函数(i,j){returni+',\n'+j;});
编辑:如果您只需要关键点,则更容易:

result = input.match(/[^\t]+(?=:)/g);
我会使用:

require 'pp'

text = "\n\t\t\t\t\tMIDDAY DRAW DATE: \t\t\tFriday 10/26/12 \n\t\t\t\t\tMIDDAY WINNING NUMBER:\t\t\t6-9-6-0\n\t\t\t\t\tMIDDAY PAYOUT: \t$4,000.\n\t\t\t\t\tNEXT MIDDAY DRAW DATE: \tSaturday 10/27/12\n\t\t\t\t"
pp text.strip.split("\n").map{ |l| l.split(':').map(&:strip) }
导致:

[["MIDDAY DRAW DATE", "Friday 10/26/12"],
["MIDDAY WINNING NUMBER", "6-9-6-0"],
["MIDDAY PAYOUT", "$4,000."],
["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]]
基本上,所有需要做的是一些字符串清理,然后在新行上拆分,然后在
:'
上拆分,再进一步清理字符串。不需要正则表达式。

我会使用:

require 'pp'

text = "\n\t\t\t\t\tMIDDAY DRAW DATE: \t\t\tFriday 10/26/12 \n\t\t\t\t\tMIDDAY WINNING NUMBER:\t\t\t6-9-6-0\n\t\t\t\t\tMIDDAY PAYOUT: \t$4,000.\n\t\t\t\t\tNEXT MIDDAY DRAW DATE: \tSaturday 10/27/12\n\t\t\t\t"
pp text.strip.split("\n").map{ |l| l.split(':').map(&:strip) }
导致:

[["MIDDAY DRAW DATE", "Friday 10/26/12"],
["MIDDAY WINNING NUMBER", "6-9-6-0"],
["MIDDAY PAYOUT", "$4,000."],
["NEXT MIDDAY DRAW DATE", "Saturday 10/27/12"]]

基本上,所有需要做的是一些字符串清理,然后在新行上拆分,然后在
:'
上拆分,再进一步清理字符串。不需要正则表达式。

您能说明您希望结果是什么样子吗?您能说明您希望结果是什么样子吗?