• 締切済み

このような時どう検索すれば良いのでしょうか

いつもお世話になっています。 テキスト検索ソフトなどで文書を検索する際に、例えば下記のような文字列で人名部分だけ検索結果に表示したい(&出力してリスト化したい)のです。 ------------------------------------------ abc.. [NAME]=suzuki abcdef.. def.. [NAME]=tanaka defghi.. ghi.. [NAME]=yamamoto ghijkl.. ------------------------------------------ 1)人名部分の直前には"[NAME]="のように特定できる文字列があるので検索にはうってつけですが"[NAME]="自体は検索結果には含めたくない。 2)人名部分の直後には半角スペースが入りそれ以降文字列が続きますが、半角スペース以降は検索結果に含めたくない。 正規表現などの使用で可能にする方法があれば、またそういう検索&検索結果のテキスト出力が可能なフリーソフトなどありましたらお教えください。 どうかよろしくお願いします。

みんなの回答

  • R32C
  • ベストアンサー率39% (115/290)
回答No.3

標準入力から名前だけ出力するプログラム です。$はプロンプトです。UNIX(Linux)のコマンドでの 実行の様子を記載しています。 $./name <ken.txt で実行しています。 lexについて簡単に紹介すると字句解析用のツールで 解析スクリプト name.l を渡すと、cのソースプログラム を出力します。ソースプログラムをそのままコンパイル してツールの出来上がりです。

参考URL:
http://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html
popomaster
質問者

お礼

>R32Cさん 長い間お礼のお返事をしないままで大変失礼しました。 お恥ずかしい話ですが結局のところそのあたりは私には理解できず返答に困っていました。すみません。 質問の件では、#1でのお礼内容のように正規表現で検索をかけて結果をテキスト形式で吐き出せるソフトを見つけて、検索結果のテキストに対してさらに置換で[NAME]部分を消すという二段構えで対処しました。 丁寧にご回答と補足をして頂き、大変ありがとうございました。

  • R32C
  • ベストアンサー率39% (115/290)
回答No.2

たまたま、仕事で、昨日やっていたので、flex(lex)でやってみました。 とりあえず、Cygwinでやりました。 実行形式になりますので、これでいいのでしょうか? --------------------------------------------------------------- $ cat ken.txt abc.. [NAME]=suzuki abcdef.. def.. [NAME]=tanaka defghi.. ghi.. [NAME]=yamamoto ghijkl.. $ cat name.l %{ #include <stdio.h> #include <setjmp.h> #include <stdlib.h> extern void Fname(void); %} %% \[NAME\]\=[a-zA-Z]+ { Fname(); } . { ; } %% jmp_buf error; void Fname(void) { printf("%s",yytext+7); } int main(void) { setjmp(error); while(yylex()) ; return 0; } $ flex name.l $ cc lex.yy.c -o name -lfl $ ./name < ken.txt suzuki tanaka yamamoto $

popomaster
質問者

補足

ご回答ありがとうございます。 ごめんなさい、プログラムに関しては素人なのでよくわからないのですが、テキストから名前部分だけ抜き出すプログラムを書いて頂けたのでしょうか? 実行の仕方がわかりません・・(>_<)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

たいていの正規表現では () なり \(\) でマッチした内容を取り出せるんですが, それでは不足でしょうか? 例えば Perl なら /\[\w+\]=(\.*?)\s+/ でマッチさせておいて, 名前の部分だけを $1 という形で利用できます.

popomaster
質問者

補足

ご回答ありがとうございます。 ごめんなさい、説明不足でした。 私自身がプログラムを書くための質問ではなく、Vectorなどに登録されているテキスト検索ソフトを使用して例題での人名部分を検索結果に表示したいのです。 つまり検索文字列入力フォームにどう書けば人名のみをヒットさせることができるのかが知りたいのです。 "[NAME]=人名"なら"\[NAME\]=[a-z]+"でヒットさせることができたので2)は自己解決しました。 ただ"[NAME]"部分は不必要なので省きたいのです。

関連するQ&A

  • 正規表現の置換(EmEditor)

    Fireworksで書きだしたhtmlをEmEditorで修正中です。 name="●●●" を一括削除しようと正規表現を使った置換を試みていますが上手く出来ません。 検索する文字列に入れるサンプル文字を教えて頂けませんか。 ■検索したい文字列例(行頭に半角スペースあり) (半角スペース)name="c123_r4_c6" (半角スペース)name="c123_r5_c5" (半角スペース)name="c123_r6_c4" などです。 全てに共通するものは name=""、c123、_r、_c です。 4、5、6 の位置にある数字は変わります。 ■置換後の文字列 空白 (検索したい文字列の行頭半角スペースも削除) よろしくお願いします。

  • エクセルで左端のスペースを削除したいです。

    こんにちは いつもお世話になっています。 エクセル2003を使っています。 A列に人名の文字列があります。左端に半角のスペース、文字列の中に全角のスペース、右端にスペースはありません。文字の個数は人名のため様々です。 ここで、左端の半角スペースだけを削除したいのです。 Ltrim関数というのが当てはまるのでしょうか。 半角スペースの削除の方法を教えてください。

  • 正規表現で特定文字に挟まれた範囲内での検索

    VS CODE にて文字列の正規表現で文字列(プログラムではありません)の検索をしたく質問いたします。 (A B C)<A B C> という文字列があり、この中の半角スペースを別の文字に置換したいのですが、全ての空白ではなく( )に挟まれた中の半角スペースだけを検索したいと思っています。 ↑の用な文字列から( )内の半角スペースだけを照らし出す正規表現を教えていただいていただけると嬉しいです。

  • PHP ファイルから文字列を検索し、スペースで区切

    こんにちは。PHPプログラム初心者です。 今回、実装したいのは、テキストファイルを読み込みます。 ----------------------- 優れる:すぐれる 1 良い:よい 0.999995 喜ぶ:よろこぶ 0.999979 褒める:ほめる 0.999979 ・・・ ------------------------ といった内容のテキストファイルです。文字と数字の間には半角スペースがあります。 そして、入力した文字が「良い」であるとします。 その文字をテキストファイルの中にあるかどうか検索して、文字と数字をスペースで分割して、 0.999995を出力したいのです。 この作業を何回か繰り返し、最後に合計を出したいと思っています。 どうすればよいでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • エディタで検索できない

    エディタで検索できない 「memo.pl?id=1234567」 という文字列があります。この文字列はテキストの中に沢山でてきます。 これを秀丸エディタ、サクラエディタなどで検索しても検索にヒットしません。数値部分のみを検索すればヒットしますが、上記の文字列はヒットしません。なぜヒットしないのでしょうか?上記の文字列をコピーして検索ウィンドウにペーストしても同じ結果です。

  • VBAでテキスト出力時のスペースについて

    VBAで下記のようなテキスト出力を書いたのですが 出力されたテキストファイルの「No」部分の頭と数字のあとに半角スペースが入ってしまします。 半角スペースなしに出力させる方法を教えてください。 ちなみに「No」は書式指定なしの数字です。 Print #1, No; Chr(9); Intime; "/"; OutTime; Chr(9); text よろしくお願いします。

  • VBスクリプトにて検索した文字を出力

    VBSによりコンピュータ名やIPアドレスやプロキシなどの情報を、PC.txtに出力させました。 以下のツールを作りたいのですが、ご教示いただけないでしょうか。 まずC:\PC配下に上記PCx.txtを複数格納しております。(内容はそれぞれのPCのもの) ツール実行後、テキストファイルを一つ一つ読み込み、 "IPアドレス"という検索文字に該当した行をその検索文字列とスペースを省いた値(xxx.xxx.xxx.xxx)を Csvに出力させます。 次に同じように他の出力したい項目を検索していきます。 イメージとして(IPアドレス,, , , ,・・・)とcsvに出力していきます。 次に2個目のテキストファイルを読み、次の行に同じく出力していきます。 最終的にテキストファイル数=CSVの行数となるようにしたいと思います。 ある場所のテキストの文字を検索する、そして必要部分のみCSVに出力するという方法のイメージがつきませんのでご教示頂けますでしょうか。

  • lengthで返ってくるバイト数の計算があいません

    お世話になります。 lengthで返ってくるバイト数の計算があわず困っています。 全角文字列と全角スペースをあわせて12文字(24バイト)の出力をさせたくて以下のように記述しました。 $spaceStr = ' ' x ((24 - length($in{'name'}))/2); $in{'name'}には全角の名前が入るようにしています。 最終的に$spaceStrをテキストに出力したいのですが、 例えば$in{'name'}が「あ」の一文字の場合、期待では ' ' x ((24 - 2)/2) なので11文字の全角スペースが出力されると思ったのですが、出力は9文字の18バイト分の全角スペースしか出力されません。 この原因は何でしょうか? ご教授の方をよろしくお願いします。

    • ベストアンサー
    • Perl
  • No2978の追加での再質問

    お礼も補足も書いてしまったためこれ以上自分で書き込みできないのですみませんが再度質問させていただきます。 NO2978での回答していただいたやり方で「半角文字+スペース」はつけることができたのですが「全角文字+スペース」、「全角文字と半角文字が混じっている+スペース」でも同じバイト数にしたいのですがどうすればいいですか? 例えば ABCDEF____ あ________ あA_______ (ただし「_」はスペースを表す) 上記の場合だとスペース込みで10バイトにしたいのです。 (文字が全角半角何が入っているかはわからない) LEFT([DBの列名] & SPACE(10),10) これだと全角半角関係なしに一文字と数えて10文字に足りない分をスペースが付け加えられます。(以下のように) ABCDEF____ あ_________ あA________ 説明が下手で申し訳ないですがよろしくお願いします。

  • Oracleのあいまい検索について

    Oracle(10g)のあいまい検索について。 DB上に「ABC」「DEF」という2つのデータがある状態で、 「ABCDEF」で検索した場合について、 検索結果として、「ABC」と「DEF」の両方を得る方法はありますでしょうか? (現状では対象データがありませんとなります。) LIKEによるあいまい検索や、Oracle textによる全文検索では、 上記の検索結果を得ることができません。 LIKEやOracle textの場合はあくまで部分一致なので、 検索対象の文字列([ABC」「DEF」)より長い(「ABCDEF」)文字列での 検索はヒットしないようです。 ご存じの方いましたら、ご教示頂きたいと思います。 以上

専門家に質問してみよう