我使用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