我从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
如果有人可以提供帮助,那就太好了。
答案 0 :(得分: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"]
]
答案 1 :(得分: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
您感兴趣的每个值都将位于捕获的组中。
答案 2 :(得分:0)
我不太明白你是什么意思,是不是" MIDDAY DRAW DATE" =" Friday 10/26/12"?跟着应该工作。
(\\n|\\t)*([\w\s]+(?:\s)?)(\\n|\\t)*([\w\s]+)
答案 3 :(得分: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"}
答案 4 :(得分:0)
如果您不需要单行,听起来您可以在/\n\t*/
上拆分字符串以获取每个名称/值对,然后将每个结果拆分为: \t+
或{{ 1}}将名称与值分开并修剪空格。在JS中,它将类似于:
:\s*
编辑:如果您只想要按键,则更容易:
//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;});
答案 5 :(得分: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"]]
基本上所有需要做的就是清理一些字符串,然后在新行上拆分,然后在':'
上拆分,再清除一些字符串。不需要正则表达式。