我使用Ruby 1.9.3,并希望从这些提取字符串“邮报”和“主题”的话:我如何从字符串中提取单词?
"[MediaExecsTech] New Topic Creation in Open Technology forum"
"[MediaExecsTech] New Post Creation in Open Technology forum"
是否有一个正则表达式可以使用吗?
我使用Ruby 1.9.3,并希望从这些提取字符串“邮报”和“主题”的话:我如何从字符串中提取单词?
"[MediaExecsTech] New Topic Creation in Open Technology forum"
"[MediaExecsTech] New Post Creation in Open Technology forum"
是否有一个正则表达式可以使用吗?
yourstring.match(/post|topic/i)
这将提取的主题或职衔:我相信我误解你的问题
thestring.match(/New (Topic|Post) (.+)/)[2]
。我认为你真的想要“帖子”和“主题”这两个字。在这种情况下,像joeframbach建议我应该工作:
thestring.match(/post|topic/i)[0]
它返回所有重新生成的字符串而不是“发布”和“主题”单词 – Kashiftufail 2013-03-23 17:05:31
有很多方法,你可以找到字符串是否含有“主题”或“邮报”,印了这一点,或返回的信息进一步处理,或使用一些逻辑来单独处理它们。
这里有一些不同的方式,我可能做到这一点:
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
这些只是打印出字符串以及是否找到“主题”或“发布”。您可以进行进一步处理,而不是打印。
它返回“#”。我只想返回“主题”任何帮助。谢谢 –
Kashiftufail
2013-03-23 17:06:53
这对我有用mystring.match(/ post | topic/i)[0] – Kashiftufail 2013-03-23 17:09:14
你应该解释它是如何工作的。不要给他们鱼,教他们如何钓鱼。此外,它不是一个足够紧密的模式:它也匹配“邮政”,“fencepost”,“特应”,“专题”。 – 2013-03-23 18:39:14