C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: 文字列を単語単位で検索


(過去ログ 41 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■21131 / inTopicNo.1)  文字列を単語単位で検索
  
□投稿者/ 小春 (31回)-(2008/06/25(Wed) 15:14:40)

分類:[C#] 

お世話になっております。

文字列を単語単位で検索したいと思い、いろいろ調べてると、
System.Text.RegularExpressions.Regexクラスの正規表現での検索が、
使えそうなんですが、この正規表現の内容がさっぱりです。

そもそも、正規表現での検索で実現可能なのでしょうか?

例)
Mes (検索文字)
--------------------
Message (ヒットしない)
Mes sage (ヒットする)
Mes.sage (ヒットする)

正規表現を調べてる内に煮詰まってしまいました。
ご教授の程、宜しくお願い致します。

引用返信 編集キー/
■21133 / inTopicNo.2)  Re[1]: 文字列を単語単位で検索
□投稿者/ 鶏唐揚 (203回)-(2008/06/25(Wed) 15:26:09)
No21131 (小春 さん) に返信
> お世話になっております。
>
> 文字列を単語単位で検索したいと思い、いろいろ調べてると、
> System.Text.RegularExpressions.Regexクラスの正規表現での検索が、
> 使えそうなんですが、この正規表現の内容がさっぱりです。
>
> そもそも、正規表現での検索で実現可能なのでしょうか?
質問と要件が前後逆になってる気がしますが、結論としては可能です。

> 正規表現を調べてる内に煮詰まってしまいました。
このあたりを見てもわからない場合は例を探してみながら覚えるしかないと思います
http://msdn.microsoft.com/ja-jp/library/az24scfc(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/kweb790z(VS.80).aspx

で。
> 例)
> Mes (検索文字)
> --------------------
> Message (ヒットしない)
> Mes sage (ヒットする)
> Mes.sage (ヒットする)
から、いわゆる「単語単位で検索」をやりたいのかなと推測。

で問題がひとつ。小春さんの質問したい事項が
「正規表現というものがよくわからない」
「正規表現クラスの使い方がわからない」
のどっちとも取れるんですが、どちらなのでしょうか。

引用返信 編集キー/
■21135 / inTopicNo.3)  Re[2]: 文字列を単語単位で検索
□投稿者/ 小春 (32回)-(2008/06/25(Wed) 15:52:28)
2008/06/25(Wed) 15:52:47 編集(投稿者)
ご返信ありがとうございます。

■No21133 (鶏唐揚 さん) に返信
> このあたりを見てもわからない場合は例を探してみながら覚えるしかないと思います
> http://msdn.microsoft.com/ja-jp/library/az24scfc(VS.80).aspx
> http://msdn.microsoft.com/ja-jp/library/kweb790z(VS.80).aspx
> から、いわゆる「単語単位で検索」をやりたいのかなと推測。
> 
> で問題がひとつ。小春さんの質問したい事項が
> 「正規表現というものがよくわからない」
> 「正規表現クラスの使い方がわからない」
> のどっちとも取れるんですが、どちらなのでしょうか。

その「単語単位で検索」をやりたいのですが、
例えば、
(あるサイトから引用)
Regex.IsMatch(TextBox1.Text, @"\b[-\w.]+@[-\w.]+\.[-\w]+\b"))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                 ↑この部分の理解に苦しんでます。

その文字列をどう組み合わせたら、
単語単位の検索になるのでしょうか…。

今は、下記のような感じで、うまくいってません(T_T)
Regex.IsMatch(TextBox1.Text, @"^\w" + "Mes" + @"^\w"))

引用返信 編集キー/
■21136 / inTopicNo.4)  Re[3]: 文字列を単語単位で検索
□投稿者/ 小春 (33回)-(2008/06/25(Wed) 16:09:20)
2008/06/25(Wed) 16:09:33 編集(投稿者)
> (あるサイトから引用)
> Regex.IsMatch(TextBox1.Text, @"\b[-\w.]+@[-\w.]+\.[-\w]+\b"))
>                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>                                  ↑この部分の理解に苦しんでます。

上記のコードは、メールアドレスっぽいものをマッチ判定しているようですが、
どんな意味合いになるのでしょうか?

\b[-\w]   = \w 文字と \W 文字の間で、[a-zA-Z_0-9]を省く?
+@[-\w.]  = @の文字を抽出し[a-zA-Z_0-9]とピリオドを省く?
+\.[-\w]  = .の文字を抽出し[a-zA-Z_0-9]とピリオドを省く?
+\b       = \w 文字と \W 文字の間?

・・・う〜ん。こんな感じなのでしょうか?

引用返信 編集キー/
■21141 / inTopicNo.5)  Re[1]: 文字列を単語単位で検索
□投稿者/ いしだ (133回)-(2008/06/25(Wed) 16:34:50)
こんな感じでどうでしょうか?

Regex.IsMatch(text, @"\b" + keyword + @"\b")
引用返信 編集キー/
■21144 / inTopicNo.6)  Re[2]: 文字列を単語単位で検索
□投稿者/ 小春 (34回)-(2008/06/25(Wed) 17:00:20)
No21141 (いしだ さん) に返信
> こんな感じでどうでしょうか?
>
> Regex.IsMatch(text, @"\b" + keyword + @"\b")

ご返信ありがとうございます。

Mes (検索文字)
--------------------
Message (ヒットしない)
Mes sage (ヒットする)
Mes.sage (ヒットする)

この場合は回避できました。ありがとうございます。
しかし、言葉足らずで申し訳ありませんが、VisualStudioの検索の単語単位の機能を
実装したいと思っています。

雰囲気分かりました。かなりのパターンを網羅して、
文字パターンを記述しなければならないような感じで大変そうですねぇ。。

そこは地道にやってこうと思ってますが、
なにしろ文字パターンを理解していないので・・・。

厚かましいようですが、
@"\b" + keyword + @"\b"
の日本語訳をお願いできないでしょうか・・・?

引用返信 編集キー/
■21145 / inTopicNo.7)  Re[3]: 文字列を単語単位で検索
□投稿者/ 鶏唐揚 (204回)-(2008/06/25(Wed) 17:29:30)
No21144 (小春 さん) に返信
> 厚かましいようですが、
> @"\b" + keyword + @"\b"
> の日本語訳をお願いできないでしょうか・・・?
>
それよりも.NET Frameworkの正規表現での、エスケープシーケンスの意味とか
覚えたほうが今後のためですが、今回は書いておきましょう。
\bはワードの区切りです。「ワードの区切り」には、文字列の始端・終端も含まれます。
まさに単語単位検索にうってつけですが…

> Mes (検索文字)
> --------------------
> Message (ヒットしない)
> Mes sage (ヒットする)
> Mes.sage (ヒットする)
>
> この場合は回避できました。ありがとうございます。
> しかし、言葉足らずで申し訳ありませんが、VisualStudioの検索の単語単位の機能を
> 実装したいと思っています。
VS上での単語単位って、上記と異なる動作してましたっけ…?

引用返信 編集キー/
■21151 / inTopicNo.8)  Re[4]: 文字列を単語単位で検索
□投稿者/ 小春 (35回)-(2008/06/25(Wed) 18:09:26)
ご返信ありがとうございます。

> それよりも.NET Frameworkの正規表現での、エスケープシーケンスの意味とか
> 覚えたほうが今後のためですが、今回は書いておきましょう。
> \bはワードの区切りです。「ワードの区切り」には、文字列の始端・終端も含まれます。
> まさに単語単位検索にうってつけですが…

大変助かります。
区切りについての、「区切り」とは何を指してるんでしょうか・・・?
「@あいうえお。」でも、"あいうえお"で検索するとヒットしますが、
「愛あいうえお愛」だと、"あいうえお"で検索はヒットしません。
文字コード?みたいなのが違う場合が「区切り」になるんでしょうか?

> VS上での単語単位って、上記と異なる動作してましたっけ…?

英語表記の動作は、これで大丈夫だと思いますが、
日本語表記の動作が異なります。
例えば、
「愛あいうえお愛」を"あいうえお"で検索する場合、
@"\b" + keyword + @"\b" ではヒットしませんが、
VS上での単語単位検索ではヒットします。

たぶん、ひらがなと漢字が「区切り」になっているのかな・・・?

但し、ひらがなとカタカナは同じものと認識され、「区切り」にならないようです。
「アイあいうえおアイ」を"あいうえお"で検索する場合、ヒットしません。



引用返信 編集キー/
■21170 / inTopicNo.9)  Re[5]: 文字列を単語単位で検索
□投稿者/ PATIO (90回)-(2008/06/26(Thu) 11:13:24)
まずは一般的な正規表現についてちゃんと勉強すべきだと思いますよ。
正規表現を覚えておくとテキスト整形の自動化とかできるようになるので
覚えて置いて損は無いです。

質問されている内容を見ていると単純に正規表現の記述方法が分からない
と言うのが原因な気がします。
正規表現と言うのは別にC#特有の物と言うわけでは無いので
Webで調べれば、相当数引っかかるはずです。

引用返信 編集キー/
■21278 / inTopicNo.10)  Re[6]: 文字列を単語単位で検索
□投稿者/ 小春 (37回)-(2008/06/30(Mon) 09:27:09)
ご返信ありがとうございます。
> 質問されている内容を見ていると単純に正規表現の記述方法が分からない
> と言うのが原因な気がします。

はい。ずばりその通りです。
Webで調べてはいますが、どうも頭に入ってこなくって。。
誰かに回答を頂けるよう楽しようと思ってましたが、
そう甘くはありませんでした…。

皆様にご回答頂いた内容を元に正規表現を勉強します。
自分で勉強するべしということで、解決済みとしたいと思います。
ご回答くださった方々、ありがとうございました。
解決済み
引用返信 編集キー/
■21282 / inTopicNo.11)  Re[7]: 文字列を単語単位で検索
□投稿者/ 鶏唐揚 (214回)-(2008/06/30(Mon) 10:17:38)
2008/06/30(Mon) 10:17:47 編集(投稿者)

No21278 (小春 さん) に返信
> ご返信ありがとうございます。
>>質問されている内容を見ていると単純に正規表現の記述方法が分からない
>>と言うのが原因な気がします。
>
> はい。ずばりその通りです。
> Webで調べてはいますが、どうも頭に入ってこなくって。。
> 誰かに回答を頂けるよう楽しようと思ってましたが、
> そう甘くはありませんでした…。
>
> 皆様にご回答頂いた内容を元に正規表現を勉強します。
> 自分で勉強するべしということで、解決済みとしたいと思います。
> ご回答くださった方々、ありがとうございました。
正規表現を1から言葉で教えるとなると相当な時間食うので
こういう場で教えを請うのは難しいと思います
(一部の書き方についての疑問なら大丈夫だと思いますが)

ソフトやエンジンによって若干の違いがありますが、
基本的な部分はほぼ同じ(規格化されてるのかな?)なので
「正規表現 基礎」とでも調べれば多くの情報が出てくると思います。
↓その一部w
http://www.turtle.gr.jp/techno/regular-expression.html
http://www.kt.rim.or.jp/~kbk/regex/regex.html
(ソフトによる書き方の違いには注意です)

覚えるとPHPやPerl等CGIプログラミングにも、さらにはプログラミングだけでなく
正規表現機能のあるテキストエディタ等でかなり便利にテキストファイルを編集できるようになるので
覚えて損はありません。お勧めします^^
解決済み
引用返信 編集キー/
■21317 / inTopicNo.12)  Re[8]: 文字列を単語単位で検索
□投稿者/ 小春 (38回)-(2008/06/30(Mon) 21:44:43)
No21282 (鶏唐揚 さん) に返信
> 正規表現を1から言葉で教えるとなると相当な時間食うので
> こういう場で教えを請うのは難しいと思います
> (一部の書き方についての疑問なら大丈夫だと思いますが)
>
> ソフトやエンジンによって若干の違いがありますが、
> 基本的な部分はほぼ同じ(規格化されてるのかな?)なので
> 「正規表現 基礎」とでも調べれば多くの情報が出てくると思います。
> ↓その一部w
> http://www.turtle.gr.jp/techno/regular-expression.html
> http://www.kt.rim.or.jp/~kbk/regex/regex.html
> (ソフトによる書き方の違いには注意です)
>
> 覚えるとPHPやPerl等CGIプログラミングにも、さらにはプログラミングだけでなく
> 正規表現機能のあるテキストエディタ等でかなり便利にテキストファイルを編集できるようになるので
> 覚えて損はありません。お勧めします^^

参考URLありがとうございます!
覚えておきます。
たぶん、正規表現を分からないという人が結構いるんじゃないかと、(実際、私もその1人…)
思いますので、差をつける意味でも必ずものにしたいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -