Ruby文字列の特定の単語の後に単語を取得するにはどうすればよいですか?
例えば:
From:Ysxrb<abc@gmail.com>\nTo: <xyzn@gmail.com>Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <9D.A1.02635.ABB40EF4@ecout1>
私はただ取得したい:
Ysxrb<abc@gmail.com
xyzabc
あなたの質問/要件は少し洗練される必要があると思います。
あなたは次のように述べています:「ルビー文字列の特定の単語の後に単語を取得するにはどうすればよいですか?」テキストの例は次のとおりです: "From:Ysxrb \ nTo:Subject:xyzabc \ nDate:Tue、19 Jun 2012 03:26:56 -0700 \ nMessage-ID:<9D.A1.02635.ABB40EF4@ecout1>"
そして最後に、これらの文字列に本当に必要なのは次の単語であると言います。
「'Ysxrb'および'xyzabc'」。
あなたはいつも電子メールのテキストを解析しますか?これはこれがどのように見えるかです?もしそうなら、あなたが取ることができるいくつかのより具体的なアプローチがあります。たとえば、この例では、次のようなことを行うことができます。
eml = "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <9D.A1.02635.ABB40EF4@ecout1>"
tokens = eml.split(/[\s\:]/)
これはこれをもたらすでしょう:
["From", "Ysxrb", "To", "", "Subject", "", "xyzabc", "Date", "", "Tue,", "19", "Jun", "2012", "03", "26", "56", "-0700", "Message-ID", "", "<9D.A1.02635.ABB40EF4@ecout1>"]
この時点で、「To」と「Subject」に続く単語が目的の場合は、次のように、それぞれの後に最初の非空白の配列要素を取得できます。
tokens[tokens.find_index("From") + 1] => "Ysxrb"
tokens[tokens.find_index("Subject") + 2] => "xyzabc" # + 2 is needed because of the newline.
通常の表現を使用できます。irbコンソールでこれを試してください。
string = "From:Ysxrb<abc@gmail.com>\nTo: <xyzn@gmail.com>Subject:"
/From:(.+)\n/.match string
$1
$ 1は、正規表現の括弧でキャプチャした後方参照を保持します
正規表現を試すことができます。例を次に示します。
>> s = "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <9D.A1.02635.ABB40EF4@ecout1>"
=> "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <9D.A1.02635.ABB40EF4@ecout1>"
>> m, w1, w2 = s.match(/^From:(\w*)\W+.*Subject: (\w*)/).to_a
=> ["From:Ysxrb\nTo: Subject: xyzabc", "Ysxrb", "xyzabc"]
>> w1
=> "Ysxrb"
>> w2
=> "xyzabc"
要件に適した正規表現を見つけるには、Ruby正規表現エディターであるrubularを使用できます。