• ベストアンサー

正規表現教えてください

たとえば, secureとenergyという単語を含む英語を検索する場合どう書けばよいでしょうか? もう少し細かい条件として, secureとenergyの間にはさまる単語は4語以内(0語から4語),単語と単語の間のスペースは1語です。 つまり,以下,英文としての正否はともかく, secure a a lot of energy secure a lot of energy secure lot of energy secure a energy secure energy などが検索できればよいのです。 よろしくお願いいたします。

noname#134358
noname#134358

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

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

量指定子を使えば可能だと思います。 あまりちゃんとした検証をとった訳ではないのですが、これでどうでしょうか 確認した処理系は鬼車です。 # 正規表現 \bsecure( ?\w* ?){0,4}energy\b # マッチする secure a a lot of energy secure a lot of energy secure lot of energy secure a energy secure energy # マッチしない secure so many a lot of energy

noname#134358
質問者

お礼

ありがとうございました。ばっちりです。 自分なりにその後, secure.+energy として,間が開きすぎのものは手作業でみていたりしましたが教えていただいたもので,うまくできました。 大変助かりました。

その他の回答 (2)

  • asciiz
  • ベストアンサー率70% (6630/9393)
回答No.2

最後の energy の単語頭を間違えました。 \<secure\>(\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s)\<energy\> こちらで。

  • asciiz
  • ベストアンサー率70% (6630/9393)
回答No.1

簡単に書くなら "\<secure\>.*\<energy\>" ですかね。 \< = 単語の始まり(直前が空白類) \> = 単語の終わり(直後が空白類) 間が「.*」なので、4語以内と言わずどんなに長くてもマッチしてしまいますが。 0語~4語にマッチさせたいとなると、 \s=空白類(スペース・タブ・改行) \w=英単語(スペースを含まない英数文字列) なので、いずれかにマッチする選択( | )と組み合わせて、 (\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s) こんな表記になります。 これを .* の代わりに記述すれば、 \<secure\>(\s|\s\w\s|\s\w\s\w\s|\s\w\s\w\s\w\s|\s\w\s\w\s\w\s\w\s)<energy\> となるでしょう。

関連するQ&A

  • 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文字という理由です。

  • (エクセル)特定のスペースをカンマに置換

    エクセル(2000、2003)で、英熟語帳を作成しています。例えば同一セル内(A1)のデータがひとつ以上の半角スペースで区切られている英語(英熟語)と日本語訳(例:a lot of たくさんの)を2列に分けたいのですが、エクセルの区切りの処理では、 A1   B1    C1    D1 a      lot   of   沢山の というように4列に分かれてしまいます。また、関数SUBSTITUTEを使って"of"と"たくさん"の間のスペースをカンマにしてカンマ区切りを試みましたが、=SUBSITUTE(A1," ",",",3として、「a lot of たくさんの」場合はうまくいっても、単語数の異なる例えば 「plenty of たくさんの」ではカンマに置換したいスペースの位置が変わる(SUBSTITUTEの最後の引数が2となる)のでうまくいきません。そこで、「もっとも右側のスペースだけをカンマに置換する」ということは可能なのでしょうか?よろしくご教授をお願いいたします。

  • 正規表現を使って、2語共起~語以内を表す方法を教えてください。

     英語文章において、ある2つの語が共起する場合の検索方法を現す正規表現を教えていただきたいのです。  ある単語(例 accident )の前後ともに7語の範囲に、ある別の単語(例 died)が現れる箇所を検索したい、といった場合、今のところ私は、KWIC Finderというソフトで「NEAR」検索でやっているのですが、これをKWICを使わずに、普通のエディターなどで、grepで正規表現を使って検索する場合のやりかたを知りたいのです。一遍に前後ともにでなくとも、「accidentの後、7語以内にdied が現れる」、「accidentの前、7語以内にdiedが現れる」と分けてもいいのですが。どうぞよろしくお願いします。

  • 「秘密を漏らす」の英語表現について

    英語の「秘密を漏らす」についてなのですが 英文 let the cat out of the bag のcat,bagの単語を検索してみてもどうやったら「秘密を漏らす」の役になるのかがいまいちわかりません^^;どなたか教えていただけませんか?

  • 正規表現

    strutsのバリデータでmaskのみで 以下の条件を正規表現を使ってあらわしたいのですが 使用可能文字  半角英数字 @ - _ . 条件  @ _ - . 同一文字の連続使用は不可。  先頭と最期は半角英数字のみ。  全部の文字数は3文字以上30文字以内。 aaa@aaa OK aaa@_-a OK aaa@@_a NG a@@@a NG @マークの連続使用不可は↓でできたのですが、 ^[a-zA-Z0-9]([a-zA-Z0-9]+@?){1,30}[a-zA-Z0-9]$ _ . - の条件を加えるとうまくいきいません。。 よい方法がございましたらご教授ください!!

  • サクラエディタ 正規表現

    正規表現の書き方をネットで探しましたが、イマイチやりたいことが出来ないので、どなたか実際にかいてもらえませんか。 ・文頭のスペースやタブを除外して、'や--の行を検索する。 ・特定のフォルダを除外してGREPをかける。  例えば、aaa.txtというファイルにあいうえおという文字列が入力されていて、  そのファイルがC:\A、C:\B、C:\Cにあり、C:\Bだけを除外してGREPをかけたい  ※除外するフォルダ名の長さは不特定 ・検索したい単語の開始と終了は決まっていて、間に何文字入ってても(数字もあり)検索する  例えば、単語の開始が あいうえお で、終了が さしすせそ の場合 雑な質問で申し訳ないですが、どなたか回答お願い致します。

  • OCRで読み取った英文を正規表現を使って整形したい

    英文をOCRで読み取ったデータがあります。 ワードなどに入れるには、末尾の余分な改行が邪魔で削除したいので、秀丸エディタを使用して整形したいと思っています。 何段階かに分けてしないといけないと思いますが、アドバイスをいただければと思います。 以下にある程度考えたものを書きますので、ご指摘いただけば幸いです。 1) 全角文字を半角にする 右クリックメニューから「ハンカクに変換」 2) スペースやタブのみの行のスペースを削除 置換で、^[ \t]+\n → \n 3) 末尾の余分なスペースを削除 置換で、 $ → なし (※ 検索文字列の$の前には半角スペースがある。) 4) 単語の途中で改行されている単語をくっつける(末尾の-を削除し、次の行と繋げる) 5) .や?や! で終っていない行末の改行を削除 上記のような流れで大丈夫でしょうか? 4)は、[a-z]-$ で検索すれば、単語を分割する末尾のハイフンは探してくれますが、それを削除して、次の行と繋げることができず、とりあえずキーマクロで処理しました。 具体的には、キーマクロ登録開始、F3で検索、一文字シフトしてハイフンと改行を削除、キーマクロ終了で、登録しておいて、後は連続的にキーマクロを実行しました。 5)は、小文字で始まっている行の先頭を探し、スペースを入れて、バックスペースで前の行とつなぎました。 ^[a-z] それでも行末が変な所があったので、 [^\.\!\?]$ で検索して、個別に直していきました。(タイトル行などで、ピリオドで終わらない場合もあるので。) このような整形の必要性は割とありそうなのですが、なかなかいい情報が見当たりませんでした。 アプリケーションも探しましたが、なかなか見つからなかったのと、見つかったものもうまくいきませんでした。 何かうまい方法などありましたら、教えてください。

  • 英語で検索する時…

    日本語で例えば…”桃太郎のお話でのおばあさんの役割”が知りたいときはただ単純に”桃太郎””おばあさんの役割”をスペースで区切って探索すればある程度自分の求めている情報が出てくると思うのですが(あくまでも例です) 英語で検索する場合、"Momotaro" "the purpose of grandmother"という風にしたらきっとこの、"purpose"が 桃太郎にかかったり、それとも全く別のものにかかる事がありますよね。 日本語と違い単語と単語の間にスペースを空けるから… "the purpose of grandmother"を一つのワードとして検索できる方法ってありますか? なんか微妙な例でごめんなさい。 しかも解りにくい文章で申し訳ないです…。

  • 並べ替え問題で・・

    高校生に聞かれてわからなかった問題です。 次ぎの括弧の中の単語を並べ替えて、英文を作るのですが、 どうしてもわかりません。 Careful ( a lot of, a journey, you, preperation, save, trouble, for, will ) you will save a lot of trouble は、これでいいと思うんですが、 残った単語をつなぎ合わせると・・・、 Careful preperation for a jurney you will save a lot of trouble. では、おかしいですよね。

  • この英語を別の表現であらわしたいのですが。。。

    この英語を別の表現であらわしたいのですが。。。 "learning foreign languages give you a lot of gifts" という英語を意味やニュアンスは買えずに、別の違う表現にしたいのですが、 何かいい表現はありますか? 例えば、My favorite class is PE.を PE is wonderful for me. というように言い換えるように、 上記の英文を言い換えたいのですが、、、、、

専門家に質問してみよう