我正在使用Ruby 1.9.3,并希望从这些字符串中提取“Post”和“Topic”字样:
"[MediaExecsTech] New Topic Creation in Open Technology forum"
"[MediaExecsTech] New Post Creation in Open Technology forum"
我可以使用正则表达式吗?
答案 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)