在Ruby字符串中的特定单词后面获取单词?

时间:2012-07-31 20:13:11

标签: ruby regex string

如何在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

3 个答案:

答案 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