VB2008正規表現の検索方法について

このQ&Aのポイント
  • VB2008にてプログラムを組んでいますが、RichTextBoxに英文を流し込んでいる際に正規表現の検索がうまくいきません。
  • 具体的には、英単語を検索してハイライトするプログラムを組んでいるのですが、正規表現の表現方法が悪く、意図した結果が得られません。
  • 例えば、RichTextBoxに含まれる英文に対して特定の単語を検索する際、正規表現を使っているのですが、意図しない結果が返ってきます。正規表現をどのように訂正すればよいか教えてください。
回答を見る
  • ベストアンサー

VB2008 正規表現 うまくいきません [ ]?

VB2008にてプログラムを組んでいます。 RichTextBox に英文を流し込んでありますが、それに対して英単語を検索して、ハイライトするプログラムを組んでいます。 しかし、正規表現の表現方法が悪くうまく検索してくれません。 例えば、RichTextBox には次のような英文があります。 I have seen many chavette. 上記英文に対して、下記のような正規表現で検索しているのですが、 [ -]?have[ s,-]? "have s"がヒットしてしまいます。 その他、chavetteという単語も回避したいのにヒットしてしまいます。 どのように正規表現を訂正すればよいでしょうか。 ================================== 【have の前に"[ -]?"をつけた理由】 "chavette" のような単語を回避し、 "abc-have" のような単語や " have" のような前にスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。 【have の後ろに"[ s,-]?"をつけた理由】 "have-had-had" のような文字列や "haves" のようなsがつく単語や "have," のようなカンマつきの単語や "have " のような後ろにスペースのある単語はヒットさせたいからです。 "?"は0か1文字という理由です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

have と haves, have-had-had とは品詞が違うんじゃないでしょうか。 いっぺんに全部を検出しようとするのには向かない例だと思います。 単に単語 have を抽出したいなら \bhave\b が使えますが。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

>上記英文に対して、下記のような正規表現で検索しているのですが、 >[ -]?have[ s,-]? >"have s"がヒットしてしまいます。 これはあり得ません。勘違いだと思います。" have " がヒットします。 単語境界を認識したいのなら、No1の方の回答のように\bを使うのが普通です。単語の前後が[ ,-]だけに限定したいので無ければ。 \bだと英数字以外のすべてとの間の「隙間」が該当します。 \bhaves?\b でいいのじゃないでしょうか。

関連するQ&A

  • 正規表現について

    例えば sample( 34 ,12 );みたいな関数があって、それを丸ごと置換ダイアログで消したいのですが、 (引数は任意で、間にスペースがあったりなかったりする) 正規表現の使い方がいまいちよく判りません。 検索文字列を ”sample(":z,:z");” <-全然自信無し。 としてもやっぱりヒットしませんでした。 どうすればよいか教えてください。 正規表現のチェックボックスはオンにしてあります。

  • 正規表現で特定の記号を抜かしてヒットさせるには

    javaで正規表現を使用してプログラムしています。 ある条件を入力させて、"."や","の記号を抜かして、 ヒットさせるしたいと思っています。 例えば "あいう"で検索かけた場合、 "あ.い,う"という単語をヒットさせて ヒットした結果を置換したいのですが、できますでしょうか。 正規表現で無くてもよいのですが、現在、多少複雑な正規表現でマッチングしている処理があり、それに簡単に付け加えれば、"."や","をヒットするように出来ないかと思っています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • python 正規表現

    http://okwave.jp/qa/q8693280.html 以前したこの質問を参考に正規表現を使ったプログラムを書いているのですが 以下のような3行からなるテキストデータ(例)から「ひらがな一文字」「かたかな一文字」の単語のみを除去したいと思っております。 (例) 単語 あ 語句 みち 空 ジャンプ 無理 ぃ お 暮らし ホーミング 石 防止 ゾ あなた URLの質問を参考に(\bでは除去できなかったので) for line in textfile:  line = re.sub(u'\s[ぁ-ゞ]\s', u' ', line)  line = re.sub(u'\s[ァ-ヾ]\s', u' ', line) としたらうまく「ひらがな一文字」「かたかな一文字」を除去できました。 しかし、次の例のように一つ目の単語にこれらがきた場合手前にスペースがないので除去できません(4行目の「ま」が除去できない) 単語 あ 語句 みち 空 ジャンプ 無理 ぃ お 暮らし ホーミング 石 防止 ゾ あなた ま 空白 みどり だからといって [ぁ-ゞ]\s のようにすると、例えば一行目は「単語 語句 み空 ジャンプ」のように一文字でない単語の最後にひらがな・カタカナがくるとその部分を除去し、後ろの単語と結合してしまうという不具合がおきてしまいます。 扱うデータ的に、行の頭にスペースを入れるということはしたくありません。(はじめに入れて後から消すといっても正規表現に当てはまった行はスペースがなくなり、そうでないところはあるといったバラバラな状況が発生するのでそれもしたくありません) これらをふまえて、うまく「ひらがな一文字」「カタカナ一文字」を除去する方法・正規表現はあるでしょうか。(今書いているプログラムはこのFor文のみなので、別で行が追加される分にはかまいません。) よろしくお願いします。

  • 正規表現でつまずいています

    お世話になっております。 VB2005を使っていますが、正規表現でつまずいています。 日付を表すデータとして、以下のような2つのパターンがあります。 Date: 02-apr-2010   ← : と 02の間に半角スペースがあります。 Date:13-Jan-2010 00:12:14 それぞれから年月日のデータのみを取り出すために正規表現を組んでみましたがうまくいきません。 "Date:\s*(?<date>.*)$|\s.*" $|\s.*  で意図したところは、文字列の最後 or スペースが1個と任意の文字が続く、というものです。 正しい表記方法をご指示いただければ幸いです。 よろしくお願いいたします。

  • 正規表現の使い方

    $input =~ s/[a-z][0-9]-[0-9]/ [a-z][0-9]-[0-9] /g; perl言語での正規表現についてです。 置換に関してなのですが、このような使い方はできないでしょうか?? [a-z][0-9]-[0-9]にヒットしたものの前と後ろにスペースを代入したいのですが、何かいいプログラミングはないでしょうか?

  • Perlの正規表現

    Perlの正規表現で質問です。 例えば、 "aabbccddee"と"cdde"という2種の文字列があるとして"cdde"だけを検索(または置換)したい場合の正規表現ってどのようにすればよいのでしょうか? いま、"cdde"で検索すると"aabbccddee"と"cdde"の2種類がヒットしてしまうのですが"cdde"だけヒットするような正規表現をどなたかご教示ください。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlの正規表現

    Perlの正規表現についての質問です。 例) 899 YES Alt 0 0.000 pps 2.000 pps 4.000 pps 0 2 YES Alt 0 1.222 (space)-0.100 (space)3.000(space)0 103 NO Alt 0 3.333 % 0.000 % 0.000 % 0                ^^^^^ =====抜粋======================================== if($_ = ~ / Alt+(\s+)+0+(\s+)+(\S+)+(\s+)+(\S+)+(\s+)+(\S+)+(\s+)+(\S+)+(\s+)+(\S+)+(\s+)+(\S+)+(\s+)+(\S+){ print OUT "\n$5,"; ================================================= 上記のような文字列があるとして"^^^^^"だけを抜き出したい場合の正規表現はどのようにすればよろしいのでしょうか? 考えたif文では当たり前ですが2番目の(-0.100)が抜き出せません。また、検索できた順に抜き出し、出力したいので if文を二つ書くのは避けたいです。 どなたか教示ください。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Javaの全角スペースの正規表現

    今、Javaのプログラムをしてるんですが、正規表現で全角スペースをどう表現したらいいのでしょうか? 下記のプログラムを実行して、スペースを埋めて「あいう」と出したいです。 Pattern.compile("正規表現").matcher(" あ い う ").replaceAll(""); 正規表現の\sとか、trim()メソッドを使用するなどだと、半角スペースしか削除することができなかったです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセルVBAで正規表現の使い方に関して

    VBA初心者です。 エクセルで会社名の曖昧な検索をしたくて調べていたら正規表現というものがあることを知りました。 けど難しくてうまく動いてくれません。。 以下のようなリストを曖昧に検索するにはどのような正規表現のプログラムを組めばいいのでしょうか? ・数あるリストの中から重複している会社があるか検索したいです。 ・前株だったり後株だったり、中には株式会社が省略されているものもあります。  また株式会社と入力されていたり、(株)と省略されていたりします。  (有限会社も同様) ・"株式会社"と会社名の間にスペースがあったりなかったりします。 ・会社名の後にスペースをあけて~工場などとついているものもあります。 ・カタカナは大文字だったり小文字だったりします。 このようなリストの中から、会社の正式名称で検索すると重複している会社がヒットするようにしたいのですが・・・ 例)株式会社 ×××   →検索→   (株)××× ~工場   ↑検索したい会社            ↑検索結果 ちょっとわかりにくいですが、書き方のヒントだけでも教えていただけると助かります。 よろしくお願いしますm(_ _)m

  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP

専門家に質問してみよう