0

Ruby 1.9.3 を使用しており、これらの文字列から「投稿」と「トピック」の単語を抽出したいと考えています。

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

使用できる正規表現はありますか?

4

3 に答える 3

2

文字列に「Topic」または「Post」が含まれているかどうかを確認したり、それを出力したり、さらに処理するために情報を返したり、ロジックを使用して個別に処理したりする方法はたくさんあります。

ここに私がそれを行うかもしれないいくつかのさまざまな方法があります:

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

これらは、文字列と、「Topic」または「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 に答える