我如何从字符串中提取单词?

时间:2013-03-23 16:58:03

标签: ruby

我正在使用Ruby 1.9.3,并希望从这些字符串中提取“Post”和“Topic”字样:

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

我可以使用正则表达式吗?

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

这将提取主题或帖子标题:

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

我相信我误解了你的问题。我认为你真的想要“post”和“topic”这两个词。在这种情况下,像joeframbach建议的那样应该有效:

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

答案 2 :(得分:-1)

yourstring.match(/post|topic/i)