2013-03-23 53 views
0

我使用Ruby 1.9.3,並希望從這些提取字符串「郵報」和「主題」的話:我如何從字符串中提取單詞?

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

是否有一個正則表達式可以使用嗎?

回答

-1
yourstring.match(/post|topic/i) 
+0

它返回「#」。我只想返回「主題」任何幫助。謝謝 – Kashiftufail 2013-03-23 17:06:53

+0

這對我有用mystring.match(/ post | topic/i)[0] – Kashiftufail 2013-03-23 17:09:14

+5

你應該解釋它是如何工作的。不要給他們魚,教他們如何釣魚。此外,它不是一個足夠緊密的模式:它也匹配「郵政」,「fencepost」,「特應」,「專題」。 – 2013-03-23 18:39:14

1

這將提取的主題或職銜:我相信我誤解你的問題

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

。我認爲你真的想要「帖子」和「主題」這兩個字。在這種情況下,像joeframbach建議我應該工作:

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

它返回所有重新生成的字符串而不是「發佈」和「主題」單詞 – Kashiftufail 2013-03-23 17:05:31

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 

這些只是打印出字符串以及是否找到「主題」或「發佈」。您可以進行進一步處理,而不是打印。

相關問題