• ベストアンサー

秀丸の正規表現(1バイト文字,2バイト文字の表現)

「英文-日本文」がセットになったデータがあります。これを英文と日本文の間で切り分けたいと思っています。Perlなどを使えばより簡単かもしれませんが、Perlはあまり知らないので、秀丸の正規表現でやりたいと思っています。そこで、1バイト文字、2バイト文字の表現の仕方が必要になってくると思うのですが、どう書いたらいいのでしょうか。 (参考データ) This is a pen. これはペンです。 を This is a pen. /// これはペンです。 のようにしたいです。

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

  • ベストアンサー
noname#102878
noname#102878
回答No.7

> 第3水準の「・」まででも大丈夫かも。 ほらインターネットじゃ文字化けしちゃった・・・ \f[\ -~]\f[、-熙] これの「熙」を別の文字に変えてください。 IMEパッドの「文字一覧」を起動。 漢字一覧を一番下までスクロール。 「・」が連続してますが、そこから上へちょっと戻ると漢字がでてきます。 私はWindowsXP IME2002(8.1.4004.0)ですが、シフトJISの0xfc4bの文字が一番最後の漢字みたいです。 「熙」をその文字に変えてみてください。

ykazuo
質問者

お礼

ありがとうございます。 インターネット上で表現できない文字であれば、答えようがないですよね。(^^; MS-IMEへの切り替え方が分からないので、後で頑張ってみます。ATOK14を使っていまして、タスクバーにIME切り替え用のアイコンが無いです (ちなみに韓国語IMEも入っていて、それにはATOKパレット上から切り替えられます)。さらにATOKで文字一覧を出そうとしたのですが、ATOKパレットには、最小限の機能しか表示されておらず(ATOKパレットが短く、伸ばすボタンも無い)、ATOKパレット上で右クリックしても「最小化」「透明化」「テキストラベル」「縦置き」「タスクバーの追加アイコン」「設定」の6つしか出てきません。この質問の内容から外れるので、解決できなかったら、また別で質問します。m(__)m

その他の回答 (10)

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.11

>文頭に///が入ったり、[ や ] の前後に///が入ったり、/// が2つ以上入る行が多かったです。 これは予想していた結果です。そこから寄せられる補足を参考に、完成形に近づけようと考えていました。 “[ や ] の前後に・・・”これ [] は1バイトの文字ですよね? 英文と言うのを何を指しているのかを、まだ理解できません。 参考となる元の文章(十行程度)と、こうなって欲しい(こうならないで欲しい)結果を提示してもらえると回答しやすいのですが。特に半角の記号や空白の扱い。 (場合によっては、マクロを組めるかも) よく分からないので、正規表現パターンの例。 [\x20-\x7E] ==> 制御コード以外のASCII文字(半角空白からチルダ (~)まで) [0-9A-Za-z] ==> 英数字 [_A-Za-z]+ ==> 英単語( \w ) [■-●] ==> 2バイト文字 ■は全角空白 ●はIMEパットの文字一覧を表示して、一番最後までスクロールします。その後、徐々にスクロール・アップして黒にそっくりな漢字が出てきたらそれです。(OKWebでこの漢字をはじかれる)

ykazuo
質問者

お礼

ありがとうございました。 みなさんにたくさん回答、アドバイスを頂いたので、締め切りたいと思います。質問の仕方が悪く、さらにマクロや正規表現の基本的なことも十分に分からないまま質問して申し訳ありませんでした。みなさん本当に丁寧にありがとうございました。m(__)m

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.10

ANo.#7 の Bo_Bo です。 >秀丸のマクロは使ったことがないので、正規表現を使った置換でお願いできますか。 ANo.#7 で回答したマクロは、「正規表現を使った置換」です。(完成形ではありませんが) "[\x20-\x7E]+" とあるのが正規表現で、英文の半角空白からチルダ (~)まで ( !"#$%&'()*+,-./0~9:;<=>?@A~Z[\]^_`a~z{|}~ ) を表しています。 適当なファイルを開いて、「検索」メニューから「置換」とし、  検索欄に ==> [\x20-\x7E]+  置換欄に ==> ///\0///  「正規表現」にチェック  「置換の前に確認」にチェック として、試しに実行してみてください。英文が "///" で挟み込まれると思います。 (マクロは単にこれを表しているだけです。) しかし、これには不備な点があります。 「英文と日本文の間で切り分けたい」と言うのを、何を「英文」とし、何を「日本文」とするかで不具合が出る可能性があります。 「日本文」と解釈して欲しい文の中に、半角の空白、括弧や円記号などがあると、正しい置き換えが出来ません。 何かの規則性が見つかれば、もう少しお役に立てるかもしれません。 (英文は必ず行頭から始まるとか、日本文は行の最後に記述されているとか)

ykazuo
質問者

お礼

ありがとうございます。 まず、前回の発言大変失礼しました。正規表現の基礎が分かっているという言葉も撤回させて下さい。[\x20-\x7E]+という表現の仕方、知らなかったです。実行させてみましたが、文頭に///が入ったり、[ や ] の前後に///が入ったり、///が2つ以上入る行が多かったです。 すみませんが、質問の内容を少し変更させて下さい。「1バイト文字、2バイト文字を漏れなく正規表現で表すにはどうすればいいのですか。」これでお願いできますか。これが僕の知りたいことなのに、僕の質問の仕方が悪いせいで、みなさんに非常に迷惑をかけているようです。「何かの規則性が見つかれば」ということですが、不規則なものも多く、それがANo.#7のお礼で「後でみなさんに頂いた答えをデータに合わせて少し編集すると思います」と言った理由です。まず1バイト文字と2バイト文字を漏れなく表現する方法が分かれば、実行しながらうまくいかないところは修正することができます。最初は、逆に追加していく方法でやっていたのですが、どんどん記号が並び、見るからに汚い正規表現になってしまいました。さらにまだまだ漏れがありそうです。ちなみに英文は必ず行頭から始まるかどうかですが、英文で始まるものと日本文で始まるものの両方がありますが、分けてやります。「日本文-英文」となっているものは、「英文-日本文」で使う正規表現の左右を逆にしてやればいいので簡単だと思います。 となれば、既に答えは出ていますか?

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.9

ANo.#7 の回答を訂正します。 // ASCII 文字列を '///' で囲む $sb = searchbuffer; #so = searchoption; $rb = replacebuffer; disabledraw; replaceallfast "[\x20-\x7E]+", "///\\0///", regular; // 半角空白からチルダ '~' まで //replaceallfast "[\x21-\x7E]+", "///\\0///", regular; // 半角空白を含まないバージョン enabledraw; setsearch $sb, #so; setreplace $rb; endmacro;

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.8

取りあえず、以下のマクロでどうでしょうか。 // ASCII 文字列を '///' で囲む $sb = searchbuffer; #so = searchoption; $rb = replacebuffer; replaceallfast "[\x20-\x7E]+", "///\\0///", regular; // 半角空白からチルダ '~' まで //replaceallfast "[\x21-\x7E]+", "///\\0///", regular; // 半角空白を含まないバージョン setsearch $sb, #so; setreplace $rb; endmacro;

ykazuo
質問者

お礼

ありがとうございます。 秀丸のマクロは使ったことがないので、正規表現を使った置換でお願いできますか。たぶん後でみなさんに頂いた答えをデータに合わせて少し編集すると思います。マクロだと、それが出来ないので、正規表現の方がありがたいです。でもこのマクロも後で参考にしてみます。それと、なぜか今まで「補足」に「お礼」を書いていたのですが、「お礼」に訂正です。

noname#102878
noname#102878
回答No.6

> 漢字の終わりは数パターンあり、どれを採用していいのか分かりませんでした。 「熙」は第2水準の最後の文字です。(だったと思います) IMEの文字パレットで確認してみてください。(Shift-JIS) さらにその後ろにもNEC外字やIBM外字などもあります。カッコ株なんてのもありますね。 扱いたい文書の使用環境が狭いのであれば(Windowsであれば)第3水準の「・」まででも大丈夫かも。

ykazuo
質問者

補足

ありがとうございます。 正規表現で表すとどうなりますか? すみませんがお願いします。

noname#102878
noname#102878
回答No.5

これではどうでしょうか。 検索:\f[\ -~]\f[、-熙] 置換:\1///\2

ykazuo
質問者

補足

ありがとうございます。 [\ -~]で記号を含む全ての1バイト文字(半角)、[、-熙]で全ての2バイト文字(全角)が表せているということですね? 参考までに、1バイトの記号とは、例えば、?!'";:-[]などです。2バイトの記号とは、例えば、「《〔…―などです。他の方と漢字の終わりの文字が違いますが、どうなんでしょう。ネットで調べていても、漢字の終わりは数パターンあり、どれを採用していいのか分かりませんでした。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.4

ちょっと訂正です。 置換前:^[a-zA-Z \?!\.]+\f[ぁ-椀、。]+

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.3

英文が文字だけでなく記号やスペースもあることを考慮する必要がありますが、基本的には次の構文でいいでしょう。 置換前:^[a-zA-Z ].+\f[\?\!\.][ぁ-椀]+ 置換後:\0///\1 ちなみに 置換前:大文字小文字のアルファベット、空白を数文字含み「.か?か!」で終わっている文字列と日本語の文字列を、「.か?か!」の前後で\0と\1の要素に分ける 置換後:検索結果の\0と\1を///で結ぶ という構文です。 その他の区切り文字がある場合には[\?\!\.]の中にその要素を追加してやればいいでしょう。 helpにわかりやすい解説があります。とりあえずこれで試してみて下さい。コツがわかると思います。

ykazuo
質問者

補足

ありがとうございます。 そうです。そういうのが知りたいのです。(^^) ちなみに正規表現の基本は理解していますし、自分なりに作ったりして試してもいます。だからコツは分かっています。但し、データは、10や100の量ではないので、一つ一つ見て調べて[\?\!\.]の中に追加していくというやり方は、ちょっと無理です。記号を含めて1バイト文字全てと2バイト文字全てを表す式が分かればありがたいです。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

秀丸のヘルプに正規表現について 詳しく書かれてありますが、それは 読んだでしょうか? [a-z^0-9] とすると 半角の小文字アルファベットとカレットと半角の数字にマッチします。 これぐらいしか 該当しそうなのは なさそうですね。

ykazuo
質問者

補足

秀丸のヘルプは読みました。ネットでも調べて自分なりにも作ったりはしているのですが、全然自信が無いので聞いています。秀丸で漏れなく(全角、半角の記号も全て含めて)1バイト、2バイトを表す方法が分かればありがたいです。ネットで調べて簡単に出てこないということは、難しいかもしれません。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

この場合は、正規表現を使わないで ただの置換としたらいいでしょう。 . を . /// に置換するだけですね。

ykazuo
質問者

補足

早速のお答えありがとうございます。 でも、これはあくまで参考データを一文だけ取ってきただけで、もっとたくさん多様なデータがあります。"?""!"などで終わっている文もあれば、文になっていないフレーズ、つまり英単語で終わっているものもあります。全てのデータ形態を説明し切れませんが、知りたいのは、秀丸の正規表現で1バイト文字、2バイト文字を表現する方法、さらにできれば実際にそれを使っての置換の仕方です。だからたぶんお答えを頂いた後、自分のデータに合わせてそれを少し編集しないといけないと思います。宜しくお願い致します。

関連するQ&A

  • 秀丸の正規表現はどの流派に属しているのですか?

    秀丸エディタ64 (バージョン8.20)を使用しています。 秀丸の正規表現は、どういった流派(?)の流れを汲んでいるのでしょうか?よく、○○互換の正規表現という言葉がありますよね。Perl互換、.NET互換など、、、Java、C、そのほかの言語/プラットフォームで秀丸の正規表現に最も近いのは何でしょうか、教えてください。

  • Javaによる正規表現について

    Javaでの正規表現で、ある文字だけを削除したい場合はどのようにすればいいのでしょうか。 例えば"This is a pen"の"is"を削除して、"This a pen"にしたい場合 String s = new String("This is a pen"); s.replace(s.substring(5,7), ""); このようにして置換でやってみたのですが、"is"だけを削除したいのですが、"This"にある"is"も一緒に削除されて"Th a pen"という結果になってしまいます。 どのようにすれば、特定の文字を削除することができるのでしょうか。 教えて下さい。

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • 秀丸の正規表現について

    下記のような並びを、 秀丸の正規表現で、4文字ずつ折り曲げたいのですがどのようにすればよいでしょうか? 分かる方、教えていただけないでしょうか? 宜しくお願い致します。 7 5 6 9 7 4 1 6 9 5 1 2 以下、略 ↓ 7569 7416 9512 以下、略

  • (秀丸)正規表現で、変数¥1内より、""のみ削除

    お世話になります。 秀丸エディタの正規表現で、 変数¥1内に、取得した文字列値が、 "1,234" だった場合、 その変数値より、""(ダブルコーティション)のみを削除して、 変数¥1内に、 1,234 として、セットし直したいです。 そこでご質問させていただきますが、 既存の変数¥1内に取得する為の正規表現のところに対して、 さらに、 どのように正規表現を追記すれば、 上記しましたように、 変数¥1内に、 1,234 として、セットし直すことが出来ますでしょうか? 以上になります。 宜しくお願いいたします。

  • 秀丸で、1行目と2行目を入れ替える。

    秀丸で、1行目と2行目、3行目と4行目(以下、同様に5行目と6行目・・・と続く)を入れ替える方法を教えて頂けませんか。以前、同様の質問があったと思いますが、検索をかけても出てきません。 [データ例] これはペンです。 This is a pen. これもペンです。 This is also a pen. これはペンですか。 Is this a pen? 但し、奇数行は日本語とは限りませんし、偶数行も英語とは限りません。 お願いします。

  • 秀丸の正規表現で一部分のみ(大文字→小文字)はできますか?

    秀丸の正規表現で一部分のみ(大文字→小文字)はできますか? テキスト文章中に、 CLASS="TABLEclass10" とある場合、 CLASS="tableclass10" へと、CLASSは大文字のまま、属性部分のみ、英大文字混じりから、全て英小文字に置き換えたいのですがどのようにすれば良いでしょうか? どなたか教えていただければ助かります。

  • (秀丸)正規表現で、特定文字列含む<~>範囲を選択

    お世話になります。 (秀丸の)正規表現について教えてください。 たとえば、テキストファイルに、1行、 ”<abc>文字列1です><abc>文字列2です><abc>文字列3です>(ここで改行)” という文字列が存在しています。 それを対象として、 (秀丸の)正規表現を利用し、 ”<abc>文字列2です>”だけをマッチさせたいのですが、 試しに、(秀丸の)正規表現で、 <abc.*文字列2.*?>  ←(なお、実際の記号は半角(.*?等)で、それぞれ入力しています・・・) で検索実行したところ、 ”<abc>文字列1です><abc>文字列2です>” として、 前の方に、マッチして欲しくない、 ”<abc>文字列1です>” までがマッチしてしまっている状況です。 そこでご質問なのですが、 上記におきまして、(秀丸の)正規表現を利用して、 ”<abc>文字列2です>”だけをマッチさせるには、 どのようにすれば、よろしかったでしょうか? (ちなみに秀丸は、2013年12月10日(火)現在の  最新バージョンVer8.32を利用しています) 以上になります。 宜しくお願いいたします。

  • 秀丸で正規表現を使って置換

    あるファイルに関して、このような置換を行いたいです。 abc/xxx,yyy,zzz.html ↓ abc/xxx.html xxxとyyyとzzzはある任意の文字列(英数字で文字数はばらばら)で 「abc/」と「,」と「.html」は固定の文字列になります。 そこで、秀丸で開いて、正規表現による検索で、 「abc/.*,.*,.*.html」 として検索すると、該当部分が検索できることがわかりましたが、置換後をどのように設定すればいいのかわかりません。 置換後のabc/xxx.htmlの「xxx.html」の部分は検索前の任意の文字列をそのまま残したいのです。 秀丸の置換機能でこのようなことは可能でしょうか? 正規表現に関してあまり詳しくないので教えてください。

  • 正規表現で5文字切抜き

    正規表現で5文字切抜き 正規表現について悩んでいます。秀丸エディタで正規表現を使いたいと思っています。 各行に任意の文字列(スペース、ハイフン、カンマ、アンダーバー、半角全角英数等含む)があります。 先頭行から5文字を残して残りは削除したいと思います。 5文字以下はそのまま残したいと思います。 例) aaaaabb⇒aaaaa ab cdef⇒ab cd a ⇒ a aa⇒aa 「^.{1,5}」とやると、先頭から5文字選択できるのはわかります。 「^.{1,5}(?=.+)」とやっても選択できるのはわかります。 ただし、6文字以上は削除とした場合、どのように正規表現を組み立てればよいでしょうか?

専門家に質問してみよう