首页 > 解决方案 > 正则表达式如何在多行搜索的多个实例中查找和替换

问题描述

我有以下文字:

vyāsa-prasādāc chrutavānZKL
etad guhyam ahaṁ paramZKL
yogaṁ yogeśvarāt kṛṣṇātZKL
sākṣāt kathayataḥ svayamPXY

rājan saṁsmṛtya saṁsmṛtyaZKL
saṁvādam imam adbhutamZKL
keśavārjunayoḥ puṇyaṁZKL
hṛṣyāmi ca muhur muhuḥPXY

tac ca saṁsmṛtya saṁsmṛtyaZKL
rūpam aty-adbhutaṁ hareḥZKL
vismayo me mahān rājanZKL
hṛṣyāmi ca punaḥ punaḥPXY

yatra yogeśvaraḥ kṛṣṇoZKL
yatra pārtho dhanur-dharaḥZKL
tatra śrīr vijayo bhūtirZKL
dhruvā nītir matir mamaPXY

现在我想要:

vyāsa-prasādāc chrutavānZKL
etad guhyam ahaṁ paramZKL
yogaṁ yogeśvarāt kṛṣṇāt sākṣāt kathayataḥ svayamPXY

rājan saṁsmṛtya saṁsmṛtyaZKL
saṁvādam imam adbhutamZKL
keśavārjunayoḥ puṇyaṁ hṛṣyāmi ca muhur muhuḥPXY

tac ca saṁsmṛtya saṁsmṛtyaZKL
rūpam aty-adbhutaṁ hareḥZKL
vismayo me mahān rājan hṛṣyāmi ca punaḥ punaḥPXY

yatra yogeśvaraḥ kṛṣṇoZKL
yatra pārtho dhanur-dharaḥZKL
tatra śrīr vijayo bhūtir dhruvā nītir matir mamaPXY

我想合并每节的最后两行。

我正在尝试崇高的文字:

find: (?s)ZKL\n((?!.*ZKL).*PXY)
replace:  \1

(?s)  for multi line search
ZKL\n is ZKL and new line
((?!.*ZKL)  to search from ZKL which is before PXY otherwse there are many ZKL
.*PXY everything till PXY

以上只会替换最后一个实例。如何看到四个节中的所有四个实例都被替换了。

我有很多这样的节

标签: regexsublimetext3

解决方案


你可以试试这个:

ZKL\n(?=.*PXY\n\n)

它匹配 ZKL 后跟一个新行,然后检查是否有一堆非换行字符后跟 PXY,然后是 2 个新行。

您可以将其替换为空格。

请注意,要使这适用于最后一节,您需要在文件末尾至少有两个新行。

演示


推荐阅读