0

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

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

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

4

3 回答 3

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

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

于 2013-03-23T18:57:12.610 回答
1

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

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

我相信我误解了你的问题。我认为您确实想要“帖子”和“主题”这两个词。在这种情况下,像 joeframbach 建议的东西应该可以工作:

thestring.match(/post|topic/i)[0]
于 2013-03-23T17:02:39.453 回答
-1
yourstring.match(/post|topic/i)
于 2013-03-23T17:02:45.500 回答