如何在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
答案 0 :(得分:2)
我认为你的问题/要求可能需要一些改进。
你说:“如何在红宝石字符串中的特定单词之后得到这个词?”你的示例文本是:“From:Ysxrb \ nTo:Subject:xyzabc \ nDate:Tue,19 Jun 2012 03:26:56 -0700 \ nMessage-ID:&lt; 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.
答案 1 :(得分:0)
您可以使用正则表达式,在irb控制台上尝试:
string = "From:Ysxrb<abc@gmail.com>\nTo: <xyzn@gmail.com>Subject:"
/From:(.+)\n/.match string
$1
$ 1 保留我们使用正则表达式中的括号捕获的反向引用
答案 2 :(得分:0)
你可以尝试一个正则表达式,这是一个例子:
>> 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"
根据您的要求找到一个好的正则表达式,您可以使用rubular, a Ruby regular expression editor