置換についてNo.36572
ken111 さん 18/05/25 10:01
 
秀丸の正規表現の質問です。

秀丸を使って簡単な置換はできるですが、以下の場合に
どうやるかわかりません。

その1

各行に以下のように
[1]
[2]
[3]
・・・

[10]
[11]
[12]
・・・
[5000]<−−−−−終わり

[数字]で連続してデータは入っているのですが
すべての[数字]の箇所を消したいです
"[" と"]"はほかの箇所で[A]と[B]とか使用しているので
そこは消したくありません。
消したいのは。[数字]の箇所だけです。
(行ごと消すのではなく、その箇所だけ消したい)



その2

各行に以下のように


1234567890aa",
ABC123444444",
ABC123567899",
ABC153567899",

ABCで始まる行の行の終わりの最後から2文字目の"を消したいです


よろしくお願いします。


[ ]
RE:36572 置換についてNo.36575
秀丸担当 さん 18/05/25 12:09
 

>[数字]で連続してデータは入っているのですが
>すべての[数字]の箇所を消したいです

[数字]は、正規表現をONにして、
\[[0-9]+\]
という検索文字列で検索できます。

または、
\[\d+\]
でもいいです。

正規表現についての詳細はヘルプにありますが、検索ダイアログまたは置換ダイアロ
グで、正規表現をONにしたとき、検索文字列の右側の「>」ボタンで簡単なよう使う
のもが出てくるので、それを参考にする方法もあります。
分解すると以下のような感じになります。
\[ [そのもの
\d 数字([0-9]と同じ)
+ 直前のパターン1回以上(直前は数字なので数字1回以上)
\] ]そのもの


>ABCで始まる行の行の終わりの最後から2文字目の"を消したいです

正規表現で書く場合、幾つかの書き方が考えられますが、前方一致と後方一致を使う
としたら以下のような感じになります。
(?<=^ABC.*)"(?=.$)

[数字]よりちょっとややこしいですが、個人的には、正規表現を書く手間より繰り返
しの作業を連続させるほうが簡単な場合は、キー操作の記録と再生を使うことが多い
です。

例えば以下のようにします。
1.[マクロ]→[キー操作の記録開始/終了](標準でShift+F1)
 タイトルバーが「記録中!」となります。
2.検索ダイアログで正規表現はONにして、「^ABC」を検索。(行頭のABC)
3.Endキーで行末に移動。
4.左矢印キーで「"」に移動してDeleteで削除。
7.[マクロ]→[キー操作の記録開始/終了](標準でShift+F1)
 タイトルバーの「記録中!」が消えます。

記録しておいた操作を、[マクロ]→[キー操作の再生](標準でShift+F2)で一度に実
行できるようになるので、これを繰り返すと簡単にできます。

[ ]
RE:36575 置換についてNo.36581
でるもんたいいじま さん 18/05/26 05:42
 
はじめまして。秀丸愛用者の「でるもんた・いいじま」と申します。

> [数字]は、正規表現をONにして、
> \[[0-9]+\]
> という検索文字列で検索できます。
>
> または、
> \[\d+\]
> でもいいです。

元の投稿では明示されていない条件なのですが、もし、
「[数字] は行頭に来る場合に限る」
という条件がついているなら、ここは
^\[[0-9]+\]
または
^\[\d+\]
としてください。
正規表現の冒頭に ^ をつけると「行頭から」という意味になります。

☆ ☆ ☆

>>ABCで始まる行の行の終わりの最後から2文字目の"を消したいです
>
> 正規表現で書く場合、幾つかの書き方が考えられますが、
> 前方一致と後方一致を使うとしたら以下のような感じになります。
> (?<=^ABC.*)"(?=.$)

別解を。前方一致・後方一致はちょっと私は使い慣れないので^^
30年前の書き方でも実現できるよ、ということでご紹介しておきます。

元の例題は
> ABC153567899",
でしたので、
検索(S):^(ABC.*)"(.)$
置換(E):\1\2
で行けると思います。

以下、上記の中の特殊文字の簡単な説明です。
1) ^ は上述の通り、行頭という意味です。
2) 2組出てくる括弧は複数の意味がありますが、ここでは、原文の内容を
 「置換(E)」のほうで \1、\2 として引用するために使っています。
3) . は「何でもいいから1文字」の意味です。
4) * は「0回以上の繰り返し」です。
5) $ を正規表現の最後に書くと、行末という意味になります。
6) " は正規表現の中では特別な意味を持ちませんので、そのまま書けます。

結果、この例では
a) この文字列は行頭から始まっています。
b) (ABC.*) と書いた部分に「ABC153567899」がヒットします。
c) (.)と書いた部分に、「,」がヒットします。
d) そこまでで行末になります。
ということから、この行が「検索(S)」に合致することになり、
「置換」のほうでは b) の文字列を \1 として、c) の文字列を
\2 として参照できることになります。

もちろん、
「ABCの後に来るのは数字が1ケタ以上に限る」なら (ABC\d+) で
いいですし、「消したい " の後には必ず , が来る」ということなら、
わざわざ (.) と \2 を使わずにそのまま , と書けばいいです。

☆ ☆ ☆

あと、元のデータはCSVか、それとも英語の論文か、そのへんかなあと
思うのですが、行末に余計なスペースが入っているといろいろややこしい
かもしれませんね。その場合は次のパターンも試してみてください。

検索(S):[ \t]+$
置換(E):※空欄にする※
置換の前に確認(K):ON

\t はタブ文字という意味です。
[ と \t の間には半角スペースを1つ入れてください。

あと、まさかとは思いますが全角スペースが紛れ込んでいる可能性が
ある場合は、角括弧の中に全角スペースも1つ入れて [  \t]+$ と
してください。

☆ ☆ ☆

ではでは。

[ ]