【问题标题】:regex how to find and replace at multiple instance along multi line search正则表达式如何在多行搜索的多个实例中查找和替换
【发布时间】:2018-11-25 04:03:16
【问题描述】:

我有以下文字:

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

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

我有很多这样的节

【问题讨论】:

标签: regex sublimetext3


【解决方案1】:

你可以试试这个:

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

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

你可以用空格替换它。

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

Demo

【讨论】:

  • 在加入最后两行之后,现在我也想将 PXY 上面的行和 PXY 上面的两行加入
  • @SanthoshYedidi 你能展示一下你对第一节的期望吗?
【解决方案2】:

这个正则表达式似乎适用于 PCRE。我不确定 sublimetext3,你可以试试这个正则表达式吗?

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

并用一个空格替换它。

注意:我在最后一段之后插入了两个新行,因此正则表达式也适用于最后一段。

Check here

编辑: 如果您想进一步将 PXY 线与上面的两条线结合起来,您可以使用ZKL\n 并将其替换为空格。

但如果您想将所有四行合并为一条,最后删除 ZKL 和 PXY,您可以使用此正则表达式,

(ZKL|PXY(\n))\n

并使用 \2\2 删除它

Demo

【讨论】:

  • @Santhosh:我已经根据您在另一个答案的评论中提到的要求更新了我的答案。希望有帮助。如果您遇到任何问题或有任何疑问,请告诉我。
【解决方案3】:

这个正则表达式应该可以完成这项工作:

(.+ZKL\n.+ZKL\n.+ZKL)\n(.+PXY)

正则表达式匹配任意数量的any char,直到'ZKL\n'。这会重复 3 次,并存储在 Group 1 中。

然后它匹配任意数量的任意字符,直到 'PXY' 这存储在 Group 2 中。

现在你替换为:

$1$2 或某些语言:\1\2

这将连接最后两行。

您应该设置global 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多