正規表現の表記方法について(英文末の改行)
-
Meryの開発、更新ありがとうございます。
正規表現の表記方法についておたずねいたします。次のような条件で英文に改行を入れたいと思っていますが、検索する文字列の指定で難儀しております。
ご教示いただけますと幸いに存じます。---
* 条件A:1論理行内(1段落)の複数の英文に対して、ピリオドなどの句点後に改行を入れて、1論理行1英文に整形したい。
* 条件B:ただし、「Dr.」「Mr.」「U.S.」など(たいてい)文末にはこない句点の後には改行を入れたくない。
* 条件C:さらに、2つの引用符(””)に囲まれた範囲内の英文については、「句点+2個めの引用符」を除いた部分の句点で改行を入れたくない。
---事例は次のとおりです。
■整形「前」文章(これを)
Abc abc. "Abc abc. Dr. ABC. Abc abc. Abc abc." Abc abc.■整形「後」文章(こうしたい。理想形)
Abc abc.
"Abc abc. Dr. ABC. Abc abc. Abc abc."
Abc abc.しかし、今できているのはここまで↓で、条件Cをうまく指定できません。
検索する文字列:(?<!St|Mr|Mrs|Dr|[A-Z])(\. |\." |\? |\! )
置換後の文字列:\1\n■整形「後」文章(今のところ、こうなります)
Abc abc.
"Abc abc.
Dr. ABC. Abc abc.
Abc abc."
Abc abc.条件Cだけならこれ↓で文字列を指定できるのですが、条件A、Bに条件Cを組み合わせる方法が思い当たりません。
検索する文字列:("[A-Z].+?\." )
置換後の文字列:\1\n■整形「後」文章(この場合、こうなります)
Abc abc. "Abc abc. Dr. ABC. Abc abc. Abc abc."
Abc abc.長々と書きまして申し訳ございませんが、お教えいただきますと幸いに存じます。
よろしくお願いたします。| Kazuo | 返信 -
ご愛用いただきありがとうございます。
ご質問の件ですが、正規表現の使い方のような技術的なご質問に関してはサポート対象外とさせていただいております。
技術的なご質問でも私が答えられる範疇ならサポートしますが、正規表現は無理です ^^;
もちろんそういったご質問を投稿していただいても問題ありませんが、正規表現にお詳しいどなたかからの回答待ちというかたちになりますね。
お力になれず申し訳ございません。
| Kuro | 返信 -
Kazuo さん
こんにちはー。
以下のような感じでどうでしょうか?検索文字列: (".+?\."|(?<!St|Mr|Mrs|Dr|\.[A-Z]|\s[A-Z])\.)\s
置換後文字列: \1\nテストした文字列: Abc abc. "Abc abc. Dr. ABC. Abc abc. Abc abc." Abc abc. Mr.Stone is not a doctor. "United States" is "U.S.".
置換結果:
Abc abc.
"Abc abc. Dr. ABC. Abc abc. Abc abc."
Abc abc.
Dr.Stone is not a doctor.
"United States" is "U.S.".| yuko | 返信 -
サポート対象外のことをお尋ねして失礼いたしました。
> ご愛用いただきありがとうございます。
もう、愛用愛用愛用させていただいております。
我が家の非力なPCの強力な助っ人です
Meryがないと作業が進みません。これからも開発も楽しみにしております。
| Kazuo | 返信 -
こんにちは。
すばらしい!独り悩んでいた時間はなんだったんだろう。。。
> 検索文字列: (".+?\."|(?<!St|Mr|Mrs|Dr|\.[A-Z]|\s[A-Z])\.)\s
> 置換後文字列: \1\n作っていただいた文字列は私が先に示した条件を満たしていました。
…のですが、次のような条件をお示しするのを忘れていました。---
条件D:2つ目の引用符の前にピリオド(またはコンマ)が来て、当該引用符の後ろが「半角スペース+小文字」だったら改行を入れない(=切れ目のない1文とみなす)
---
というものです。■置換前文字列(これを)
Abc abc. "Abc abc. Dr. ABC. Abc abc." Abc Mr. ABC.
Abc abc. "Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
Abc abc. "Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
↑
下二行はここ「” a」になっています■置換語文字列(こうしたい)
Abc abc.
"Abc abc. Dr. ABC. Abc abc."
Abc Mr. ABC.
Abc abc.
"Abc abc. Dr. ABC. Abc abc." abc Mr.
Abc abc.
"Abc abc. Dr. ABC. Abc abc," abc Mr.
↑
ここに改行を入れたくないYukoさんが作ってくださったのをちょっと改変すればできるかな?と思ってトライしていたのですが、今の所うまくいっておりません。
進展(または膠着)がありましたら、別途ご報告申し上げます。
ますはお礼まで申し上げます。
ありがとうございました。| Kazuo | 返信 -
先の投稿の修正です。
先に投稿した内容の置換前文字列と置換後文字列に誤りがありました。つぎのとおり、修正いたします。■置換前文字列(これを)
Abc abc. "Abc abc. Dr. ABC. Abc abc." Abc Mr. ABC.
Abc abc. "Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
Abc abc. "Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
↑
下二行はここ「” a」になっています■置換語文字列(こうしたい)
Abc abc.
"Abc abc. Dr. ABC. Abc abc."
Abc Mr. ABC.
Abc abc.
"Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
Abc abc.
"Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
↑
ここに改行を入れたくない自分でも考えてみますが、アドバイスいただけますと幸いに存じます。よろしくお願いいたします。
| Kazuo | 返信 -
> ■置換前文字列(これを)
> Abc abc. "Abc abc. Dr. ABC. Abc abc." Abc Mr. ABC.
> Abc abc. "Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
> Abc abc. "Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
> ↑
> 下二行はここ「” a」になっています
>
> ■置換語文字列(こうしたい)
> Abc abc.
> "Abc abc. Dr. ABC. Abc abc."
> Abc Mr. ABC.
> Abc abc.
> "Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
> Abc abc.
> "Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
> ↑
> ここに改行を入れたくないだいぶ複雑なので、1発でその形にするのはちょっと思いつかないですね…。
置換を2回実行してもよければ、以下のような順序で実行すれば実現できると思います。(1)
検索文字列: (".+?(,|\.)"|(?<!St|Mr|Mrs|Dr|\.[A-Z]|\s[A-Z])\.)\s
置換後文字列: \1\n(2)
検索文字列: "\n([a-z])
置換後文字列: " \1| yuko | 返信 -
yukoさん、ありがとうございます。
感謝、感激!です。おかげさまで解決しました。
> だいぶ複雑なので、1発でその形にするのはちょっと思いつかないですね…。
> 置換を2回実行してもよければ、以下のような順序で実行すれば実現できると思います。1発でできるとスマートですが、マクロにしてしまえば置換実行回数の手間は省けるので問題なしです。
一度改行を入れてから戻せばよかったんですね。
たいへん勉強になりました。改めてお礼申し上げます。
ありがとうございました。---
以下、補足のご報告です。
先にお示しした置換前文字列の条件、
> > ■置換前文字列(これを)
> > Abc abc. "Abc abc. Dr. ABC. Abc abc." Abc Mr. ABC.
> > Abc abc. "Abc abc. Dr. ABC. Abc abc." abc Mr. ABC.
> > Abc abc. "Abc abc. Dr. ABC. Abc abc," abc Mr. ABC.
> > ↑
> > 下二行はここ「” a」になっていますに加えて、次のようなパターンもあったので、
■置換前文字列の追加条件
Abc abc. "Abc abc. Dr. ABC. Abc abc," ABC abc.
↑
「," 」のあとに大文字がくるyukoさんに教えていただいた
> (2)
> 検索文字列: "\n([a-z])
> 置換後文字列: " \1を、次のように変更することで希望の置換(「,"」の後ろはピリオドまで改行しない文字列を作る)ができました。
検索文字列: ,"\n
置換後文字列: ," \1以上です。
| Kazuo | 返信 -
矢印(↑)の場所が変でした。
> ■置換前文字列の追加条件
> Abc abc. "Abc abc. Dr. ABC. Abc abc," ABC abc.
> ↑
> 「," 」のあとに大文字がくる修正します。こうです。
■置換前文字列の追加条件
Abc abc. "Abc abc. Dr. ABC. Abc abc," ABC abc.
↑
「," 」のあとに大文字がくる失礼しました。
| Kazuo | 返信 -
何度もすいません。やっぱり矢印(↑)の場所が変ですね。
> ■置換前文字列の追加条件
> Abc abc. "Abc abc. Dr. ABC. Abc abc," ABC abc.
> ↑
> 「," 」のあとに大文字がくる示したいことは、
abc," ABC
というように
「," 」のあとに大文字がくるパターンもあった、
ということです。重ね重ね失礼いたしました。
| Kazuo | 返信 -
>> Kazuo さん
ご返信ありがとうございます。
> サポート対象外のことをお尋ねして失礼いたしました。
いえいえ、このフォーラムでは他のユーザさんが回答してくれることもありますのでご自由に質問していただいて大丈夫ですよ。
正規表現やマクロ (JavaScript) 関連のご質問も時々いただきますが、テキストエディタを開発しているからと言って正規表現や JavaScript に詳しいわけではありませんので私はお役に立てないことが多いのですが、ご了承くださいませ ^^;
> 我が家の非力なPCの強力な助っ人です
そう言っていただけると嬉しいです。私がメインで使っている PC もかなり古いものですが、一応 Mery は動いてくれていますね。今後も軽快さを優先して開発していこうと思います。
>> yuko さん
サポートのご協力ありがとうございます。
正規表現は暗号にしか見えないので助かりました。内容的に 1 つの案件レベルじゃないですか!
何度読み返しても私にはサッパリわからないですね… ^^;
| Kuro | 返信 -
>> Kazuo さん
解決できたようで良かったです~!
>> Kuro さん
逆に私は、正規表現を考えるの結構好きです。ナンプレ的な問題を解いてアハ体験しているような感じでw
Mery を使いだした頃にはほとんど使えなかったものですが、気付けば割と色々できるようになってきて、更に楽しくなってきました。
インクリメンタルサーチ機能は、本当に正規表現作成が捗りますw| yuko | 返信