重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!gooアプリ版

正規表現を使って、日英の2行を1行にするにはどうしたら良いのでしょうか。
正規表現は素人です。

置換前

思いやりがある人
a giving person
しわがれ声
a gruff voice

置換後

思いやりがある人 a giving person
しわがれ声 a gruff voice

宜しくお願いいたします。

質問者からの補足コメント

  • HAPPY

    丁寧なお返事を頂き感謝です。
    しかも大変迅速だったので驚いています。
    ありがとうございました。

    回答を幾度か読んでみましたが、私には、もっと勉強しないと分からないようです。

    私は、検索語を正規表現を用いて \n^[ -~]+ にして探せば、後は置換するだけと考えていたのですが、置換語に [ -~]+ がそのまま反映されてしまい、壁に当たっていました。

    正規表現は奥が深いのですね。
    頑張ろうと思います。

      補足日時:2015/12/14 13:28

A 回答 (1件)

「Onigsed」を使用したバッチファイルの例を書かせて頂きます。



Onigsedは、テキスト処理をするプログラムです。

以下のページを開き、一番上にある「Onigsed 2009年10月31日バージョン」をクリックし、ファイルをダウンロードします。

■ Onigsed
http://www.kt.rim.or.jp/~kbk/sed/

ダウンロードしたファイルを解凍します。

次に、メモ帳を開きます。

以下の線内の文章をコピー&ペーストします。

--------------------------------------

@echo off

rem ■ 「出力ファイルパス」をセット ■
set 出力ファイルパス=%~dpn1(置換後)%~x1

rem ■ ファイルがドラッグ&ドロップされなければ終了する ■
set DROP=%~a1
if not "%DROP:~0,1%"=="-" exit

rem ■ テキストを置換する ■
onigsed -e "{s/^\(.*[ぁ-んァ-ヶ亜-黑].*\)$/\1≪_日本語行末_≫/gi; s/^\([^ぁ-んァ-ヶ亜-黑]*[a-zA-Z][^ぁ-んァ-ヶ亜-黑]*\)$/≪_英語行頭_≫\1/gi;}" "%~1" |^
onigsed -e ":loop; N; $!b loop; ; s/[\n\r]/≪_改行_≫/gi; " |^
onigsed -e "{ s/≪_日本語行末_≫≪_改行_≫≪_英語行頭_≫/ /gi; s/≪_改行_≫/\n/gi; s/≪_日本語行末_≫//gi; s/≪_英語行頭_≫//gi; }" > "%出力ファイルパス%"
start "" "%出力ファイルパス%"

--------------------------------------

「日英の2行を1行にする.bat」という名前を付けて、任意の場所に保存します。これがバッチファイルです。

出来たバッチファイルを、先程解凍したOnigsedのフォルダ内に移動します。

あとは、テキストファイルを、当該のバッチファイル上にドラッグ&ドロップすれば、置換されてファイル出力されます。

対応ファイルは、テキストファイルのみで、複数個のドラッグ&ドロップには対応していません。

出力ファイルは、元ファイルとは別に出力されるようになっていますが、上書きしたい場合は、「set 出力ファイルパス=%~dpn1(置換後)%~x1」を、「set 出力ファイルパス=%~1」に書き換えてください。

処理後にファイルを開くようになっていますが、開きたくない場合は、「start "" "%出力ファイルパス%"」という記述を削除してください。

プログラマーの方なら、もっとスマートな処理を書けるかと思いますが、自分にはこれが限界です。完璧な処理ではないですが、ある程度の実用は出来るかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!