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

问题描述:

如何在Ruby字符串中的特定单词之后获取单词?获取Ruby字符串中特定单词后的单词吗?

例如:

From:Ysxrb<[email protected]>\nTo: <[email protected]>Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <[email protected]> 

我只是想:

Ysxrb<[email protected] 

xyzabc 
+0

您的最终目标似乎是试图解析电子邮件。也许email_reply_parser会适合你的需要? https://github.com/github/email_reply_parser – 2012-07-31 21:23:40

我认为你的问题/需求可能需要一些细化。

您声明:“如何获取红宝石字符串中特定单词之后的单词?”您的示例文本是这样的:“From:Ysxrb \ nTo:Subject:xyzabc \ nDate:Tue,2012年6月19日03:26:56 -0700 \ nMessage-ID:< [email protected]>”

,然后你终于说,你真的想这些字符串是什么下面的话:

“‘Ysxrb’和‘XYZABC’”。

你会一直在解析电子邮件的文本,这看起来是什么?如果是这样,那么你可以采取一些更具体的方法。举例来说,在这个例子中,你可以做这样的事情:

eml = "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <[email protected]>" 
tokens = eml.split(/[\s\:]/) 

这会产生这样的:

["From", "Ysxrb", "To", "", "Subject", "", "xyzabc", "Date", "", "Tue,", "19", "Jun", "2012",  "03", "26", "56", "-0700", "Message-ID", "", "<[email protected]>"] 

此时,如果字下面的“收件人”和“主题”是什么你“以后再,你可以简单地得到了第一个非空数组元素各一个,这样的:

tokens[tokens.find_index("From") + 1] => "Ysxrb" 
tokens[tokens.find_index("Subject") + 2] => "xyzabc" # + 2 is needed because of the newline. 
+0

这正是我想要的!非常感谢你!! – user1429322 2012-08-01 16:09:57

+0

太棒了!很高兴我能帮上忙 :) – MotownJoe 2012-08-01 18:37:46

您可以使用正规表示法,试试这个IRB控制台上:

string = "From:Ysxrb<[email protected]>\nTo: <[email protected]>Subject:" 
/From:(.+)\n/.match string 
$1 

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

你可以尝试一个正则表达式,这里有一个例子:

>> s = "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <[email protected]>" 
=> "From:Ysxrb\nTo: Subject: xyzabc\nDate: Tue, 19 Jun 2012 03:26:56 -0700\nMessage-ID: <[email protected]>" 
>> 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