特定の文字列のない行から改行を削除したNo.08633
くまくま さん 18/03/08 12:25
 
特定の文字列のない行から改行を削除したいのですが、
なかなかうまく行きません。
お知恵を拝借できませんでしょうか。

[ ]
RE:08633 特定の文字列のない行から改行をNo.08634
くまくま さん 18/03/08 12:36
 
>特定の文字列のない行から改行を削除したいのですが、
>なかなかうまく行きません。
>お知恵を拝借できませんでしょうか。

「AAA」の無い行から、最後の\nを削除したいのです。

検索  ^(?!.*(AAA)).*\n
置換  \1

検索した文字列を持ってこれません。


[ ]
RE:08634 特定の文字列のない行から改行をNo.08635
K'zawa さん 18/03/08 14:07
 
くまくまさん、こんにちは。
K'zawa/ユーザーです。

検索  ^(?!.*aaa)(.*)\n
置換  \1


検索  (?<!^.*aaa.*)\n
置換  (空欄)

でできると思います。

[ ]
RE:08635 特定の文字列のない行から改行をNo.08636
くまくま さん 18/03/08 16:16
 
>くまくまさん、こんにちは。
> ......
>でできると思います。

できました!!
(?<!^ パターンのグループ化 ということですね。……でもよくわかりません……

[ ]
RE:08636 特定の文字列のない行から改行をNo.08637
くまくま さん 18/03/08 16:52
 
>>くまくまさん、こんにちは。
> ......
>(?<!^ パターンのグループ化 ということですね。……でもよくわかりません……


aaa が無い行の行頭にbbbを挿入する、このような場合はどうなりますでしょう?

[ ]
RE:08637 特定の文字列のない行から改行をNo.08638
K'zawa さん 18/03/08 21:31
 
くまくまさん、こんにちは。
K'zawaです。

>aaa が無い行の行頭にbbbを挿入する、このような場合はどうなりますでしょう?

検索  ^(?!.*aaa)
置換  bbb

です。
(?!…) は後方不一致指定なので、「後ろに … にマッチするものがない」とい
う意味。中身が .*aaa なので、最長でも行末までに aaa がない。
なので、 ^(?!.*aaa) は、「行末までに aaa がない行頭」になります。
最終的にマッチするのはあくまでも行頭です。

前の ^(?!.*aaa)(.*)\n と途中まで一緒ですが、
こちらは行頭から改行までにマッチして、改行以外を \1 で復元しているので
改行だけきえました。

[ ]
RE:08638 特定の文字列のない行から改行をNo.08639
くまくま さん 18/03/09 11:35
 
>こちらは行頭から改行までにマッチして、改行以外を \1 で復元しているので
>改行だけきえました。

この、\1 で復元 と言うのは、指定しなくても大丈夫なんでか……

[ ]
RE:08639 特定の文字列のない行から改行をNo.08640
K'zawa さん 18/03/09 14:32
 
くまくまさん、こんにちは。
K'zawaです。

>この、\1 で復元 と言うのは、指定しなくても大丈夫なんでか……

これは前の、\nを削除する話、

検索  ^(?!.*aaa)(.*)\n
置換  \1

のことを言っています。


もしかして
(…)

(?=…)  後方一致指定
(?!…)  後方不一致指定
(?<=…)  前方一致指定
(?<!…)  前方不一致指定
の区別がついてないのでしょうか?

[ ]
RE:08640 特定の文字列のない行から改行をNo.08641
くまくま さん 18/03/09 15:30
 
>もしかして
>(…)
>と
>(?=…)  後方一致指定
>(?!…)  後方不一致指定
>(?<=…)  前方一致指定
>(?<!…)  前方不一致指定
>の区別がついてないのでしょうか?

>もしかして
>(…)
>と
>(?=…)  後方一致指定
>(?!…)  後方不一致指定
>(?<=…)  前方一致指定
>(?<!…)  前方不一致指定
>の区別がついてないのでしょうか?

これは、わかります。
いまやっとわからないところがわかりました!

(?<!^.*aaa.*)\n は、カッコ内で指定した内容は変化がなく、
置換は、空白なので「\n」だけが削除される。

検索  ^(?!.*aaa)
置換  bbb

は、カッコ内の条件にあう行の「^」行頭を指定して「bbb」に差し替える。
ということですね。

タグの使い方を間違えていました。

いろいろ丁寧にありがとうございました!
基本的なことでつまずいていました。



[ ]
RE:08641 特定の文字列のない行から改行をNo.08642
K'zawa さん 18/03/09 16:49
 
くまくまさん、こんにちは。
K'zawaです。

>(?<!^.*aaa.*)\n は、カッコ内で指定した内容は変化がなく、
>置換は、空白なので「\n」だけが削除される。
>
>検索  ^(?!.*aaa)
>置換  bbb
>
>は、カッコ内の条件にあう行の「^」行頭を指定して「bbb」に差し替える。
>ということですね。

そのとおりです。
解決してよかったです。

[ ]
RE:08642 特定の文字列のない行から改行をNo.08643
くまくま さん 18/03/09 17:16
 
K'zawa さん

ありがとうございました!!!

[ ]