1

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

誰かが助けてくれれば、それは素晴らしいことです。

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

私は使用します:

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 に答える
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 に答える