4

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

3 回答 3

4

我认为您的问题/要求可能需要一些改进。

您说:“如何在 ruby​​ 字符串中获取特定单词之后的单词?” 您的示例文本是这样的:“发件人:Ysxrb\n收件人:主题:xyzabc\n日期:2012 年 6 月 19 日星期二 03:26:56 -0700\n消息 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.
于 2012-07-31T20:41:47.957 回答
0

你可以使用正则表达式,在 irb 控制台上试试这个:

string = "From:Ysxrb<abc@gmail.com>\nTo: <xyzn@gmail.com>Subject:"
/From:(.+)\n/.match string
$1

$1保存我们用正则表达式中的括号捕获的反向引用

于 2012-07-31T21:08:45.620 回答
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,一个 Ruby 正则表达式编辑器

于 2012-07-31T21:20:55.150 回答