- 締切済み
秀丸 正規表現
ここ数日奮闘しているのですが、秀丸の初心者で上手くいきません。 格関係 case relation 間接受身 indirect passive 間接使役 indirect caus ation を 格関係,case relation, 間接受身,indirect passive, 間接使役,indirect caus ation, の形に直し、データベースで使いやすいように整形したいのですがうまくできません。 \s を , に置き換えすると英単語の間の半角スペースも置き換わってしまいます。 \w\sで英単語を選択できることはわかりましたが、 \s^\w\s では機能しませんでした。 これを置き換える方法を教えていただけませんでしょうか? どうかよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- asciiz
- ベストアンサー率70% (6852/9748)
>asciizさんはどのソフトでしていますか? perlの1行コマンドで試しています。 で、回答No.2を試したところ、確かにできませんでした(汗 行末記号の扱いあたりに問題がありそうです、すみません。 ということで、別のパターンを考えてみました。 s/(\s[^ ]+)$/,\1/ 「行末にある、空白類+空白以外行末まで、の前に、カンマを入れる」 とすることにより、最後の単語の前にカンマを入れられました。 こちらでの実行テストは、単語テキストを words.txt に保存しておいて、コマンドラインから C:\> perl -p -e "s/(\s[^ ]+)$/,\1/" <words.txt のように実行しました。 perl はWindows標準コマンドではありませんので、Windows用Perl(Active perl など)をインストールする必要があります。
- asciiz
- ベストアンサー率70% (6852/9748)
>Code mixing コードミキシング >英単語が先に来る場合に対応できませんでした。 (1)の応用です。 「英単語が先」ではなく「日本語が後」と考えれば、 (1')最後の単語(およびスペース)の前にカンマを付ける s/(\s\w)$/,\1/ これで良いでしょう。(2)は一緒です。 日本語が前になる行と後になる行が1ファイル中に混ざるのだと、さすがに相当難しくなりますが…?
- asciiz
- ベストアンサー率70% (6852/9748)
秀丸は知らないので、「s/(検索パターン)/(置換パターン)/」という形で書きますけど、 (1)最初の単語の後ろにカンマを付ける s/^(\w)/\1,/ (2)行末にカンマを付ける s/$/,/ の2段階でやれば簡単でしょう。 いっぺんにやろうとすれば、こうしてもいいですが。 s/^(\w)(.*)/\1,\2,/ ↑これは、「行の最初の単語の後と、それに続く全ての部分の後ろに、カンマを付ける」となっていて、(2)とは少し考え方が違っています。
補足
ありがとうございます! おかげさまで無事できました。 (1)で「日本語、英単語」のように変換することができました。 ただ、 Code mixing コードミキシング Cohort コーホート Complementary distribution 相補分布 のように英単語が先に来る場合に対応できませんでした。 この場合の対処方法も教えていただけると勉強になります。 ずうずうしいお願いですがよろしくお願いします。
補足
asciizさん、ご回答ありがとうございます。 残念ながら秀丸ではできませんでした。 asciizさんはどのソフトでしていますか?