如何在 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
我认为您的问题/要求可能需要一些改进。
您说:“如何在 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.
你可以使用正则表达式,在 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"
要找到适合您要求的好的正则表达式,您可以使用rubular,一个 Ruby 正则表达式编辑器