1

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

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

这是我的文字:

\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

如果有人可以提供帮助,那就太好了。

4

6 回答 6

4
string.scan(/^\s*(.*?):\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"]
]

如果您只想要没有键的值,那么

string.scan(/:\s*(.*?)\s*$/)

会给你:

[
  ["Friday 10/26/12"],
  ["6-9-6-0"],
  ["$4,000."],
  ["Saturday 10/27/12"]
]
于 2012-10-27T02:49:15.017 回答
1

以下应该有效:

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

示例:http ://www.rubular.com/r/qrxMyc7tT7

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

于 2012-10-27T02:40:32.790 回答
0

我不太明白你的意思,是不是像“MIDDAY DRAW DATE”=“Friday 10/26/12”?跟随应该工作。

(\\n|\\t)*([\w\s]+(?:\s)?)(\\n|\\t)*([\w\s]+)
于 2012-10-27T02:45:51.763 回答
0
Hash[*string.split(/\s{2,}/)[1..-1]]
#=> {"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"}
于 2012-10-27T03:24:26.383 回答
0

如果您不需要单线,听起来您可以拆分字符串/\n\t*/以获取每个名称/值对,然后拆分每个结果: \t+:\s*将名称与值分开并修剪空格。在 JS 中,它会是这样的:

//JS version 1.8.1 or higher
var result = input.trim()
                .split(/\s*\n\t*/)
                .map(function(el) { return el.split(/:\s*/); });

//test:
result.reduce(function(i, j) { return i + ',\n' + j;});

编辑:如果你只想要钥匙,那就更容易了:

result = input.match(/[^\t]+(?=:)/g);
于 2012-10-27T04:09:08.773 回答
0

我会使用:

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"]]

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

于 2012-10-27T04:19:08.943 回答