2013-03-23 60 views
0

我使用Ruby 1.9.3,并希望从这些提取字符串“邮报”和“主题”的话:我如何从字符串中提取单词?

"[MediaExecsTech] New Topic Creation in Open Technology forum" 
"[MediaExecsTech] New Post Creation in Open Technology forum" 

是否有一个正则表达式可以使用吗?

回答

-1
yourstring.match(/post|topic/i) 
+0

它返回“#”。我只想返回“主题”任何帮助。谢谢 – Kashiftufail 2013-03-23 17:06:53

+0

这对我有用mystring.match(/ post | topic/i)[0] – Kashiftufail 2013-03-23 17:09:14

+5

你应该解释它是如何工作的。不要给他们鱼,教他们如何钓鱼。此外,它不是一个足够紧密的模式:它也匹配“邮政”,“fencepost”,“特应”,“专题”。 – 2013-03-23 18:39:14

1

这将提取的主题或职衔:我相信我误解你的问题

thestring.match(/New (Topic|Post) (.+)/)[2] 

。我认为你真的想要“帖子”和“主题”这两个字。在这种情况下,像joeframbach建议我应该工作:

thestring.match(/post|topic/i)[0] 
+0

它返回所有重新生成的字符串而不是“发布”和“主题”单词 – Kashiftufail 2013-03-23 17:05:31

2

有很多方法,你可以找到字符串是否含有“主题”或“邮报”,印了这一点,或返回的信息进一步处理,或使用一些逻辑来单独处理它们。

这里有一些不同的方式,我可能做到这一点:

REGEX = /\b(#{ Regexp.union(%w[Topic Post]) })\b/ 
=> /\b((?-mix:Topic|Post))\b/ 

ARRAY = [ 
    "[MediaExecsTech] New Topic Creation in Open Technology forum", 
    "[MediaExecsTech] New Post Creation in Open Technology forum" 
] 

ARRAY.each do |s| 
    puts s[REGEX, 1] 
end 
=> Topic 
=> Post 

这只是打印找到的单词。

ARRAY.map { |s| 
    s[REGEX, 1] 
} 
=> [ 
    [0] "Topic", 
    [1] "Post" 
    ] 

这会为每个搜索到的字符串返回一个数组。如果单词不出现,数组元素将是nil

ARRAY.each do |s| 
    case s[REGEX, 1] 
    when 'Topic' 
    puts "#{ s } contains Topic" 
    when 'Post' 
    puts "#{ s } contains Post" 
    end 

    case s 
    when /\bTopic\b/i 
    puts "#{ s } contains Topic" 
    when /\bPost\b/i 
    puts "#{ s } contains Post" 
    end 
end 
=> [MediaExecsTech] New Topic Creation in Open Technology forum contains Topic 
=> [MediaExecsTech] New Topic Creation in Open Technology forum contains Topic 
=> [MediaExecsTech] New Post Creation in Open Technology forum contains Post 
=> [MediaExecsTech] New Post Creation in Open Technology forum contains Post 

这些只是打印出字符串以及是否找到“主题”或“发布”。您可以进行进一步处理,而不是打印。

相关问题