2012-02-21 5 views
3

長いテキストからいくつかの単語をすべて大文字で抽出しようとしています。だから、例では:テキストのALL CAPS "phrase"をキャプチャしてください

Here is a couple words of text. If you want more information please reference the DOCUMENT RECORDS log. It explains the PATH TO ENLIGHTENMENT book that will solve all problems. Also, don't forget the CAR TUNE-UP GUIDELINES.

私はDOCUMENT RECORDSPATH TO ENLIGHTENMENTCAR TUNE-UP GUIDELINESをキャプチャしたいです。

次の正規表現はRubularで動作するように見えます(ただし、ハイフンを含むケースは含まれていません)。

(\b([A-Z]|-|\s){3,}\b)  
(\b[A-Z- ]{3,}\b) 
(\b[A-Z-\s]{3,}\b) 

しかし、自分のプログラムでそれらを動作させることはできません。私はちょうどスペースは、私はドンと\sを交換する場合は」

... Long stack trace followed by: 

[NOTE] 
You may have encountered a bug in the Ruby interpreter or extension libraries. 
Bug reports are welcome. 
For details: http://www.ruby-lang.org/bugreport.html 

:私は私のプログラムで次のコードを実行すると、私は次のエラーを取得する、

if content.to_s.scan(/\b[A-Z-\s]{3,}\b/) 
    item_title = content.to_s.scan(/\b[A-Z-\s]{3,}\b/) 

(それはrakeタスクです)エラーは発生しますが、もはや何も一致していないようです。私はRuby 1.9.3を実行しています。 Rubular.comのサイトでは動作しますが、私のプログラムで動作しないのはなぜですか?私の正規表現は駄目だと分かります。どのようにしてより正確に改善することができますか?この正規表現は空白やその他の句読点の間のすべての単語にキャップを見つけ、この

 (?<=\s)(?:[A-Z\-\s]+)(?=\s|\.|,) 

を試してみてください

/\b[A-Z-]+(?:\s+[A-Z-]+)+\b/ 
+3

ruby​​ 1.9.3の正確なバージョン、p0またはp125などを使用していますか?おそらくRubyに本当にバグがあり、それを報告する必要があります。 1.9.3-p0では、この正規表現は期待通りに機能します(ところで、 '-\ b [AZ \ - \ s] {3、}} \ b/')。 –

+0

ありがとう。あなたが示唆したようにハイフンをエスケープすると、プログラムをクラッシュさせる問題を解決したようです。私は1.9.3-p0を走っています。残念ながら、Regexを動作させる問題は解決しません。私が探している3つのアイテムは返されません。助言がありますか?なぜRubular.comでは動作しますが、私のプログラムでは動作しませんか?他に何を探していますか?ご協力いただきありがとうございます。 – rodleg

+0

*私が探している3つの項目は返されません。*あなたの更新されたソースコードとその結果を(あなたの質問を編集して)投稿してください(予期しない限り)。 –

答えて

0

は、Rubyのことは知らないが、何あなたが記述することで行うことができます。

0

あなたの現在の正規表現では、結果として得られる全大文字の文字列が少なくとも3文字以上必要であるようです。したがって、クイックバージョンは次のようになります。/[A-Z][^a-z]+[A-Z]/これにより、フレーズにアポストロフィやダッシュなどの句読点を使用できます。末尾のスペースや句読点を避けます。

アクセント付きの文字とその他の国際文字を一致させる必要がある場合は、文字クラスを/[[:upper:]][^[:lower:]]+[[:upper:]]/として書き直したいと思うかもしれません。

関連する問題