regex - 正则表达式如何在多行搜索的多个实例中查找和替换
问题描述
我有以下文字:
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
以上只会替换最后一个实例。如何看到四个节中的所有四个实例都被替换了。
我有很多这样的节
解决方案
你可以试试这个:
ZKL\n(?=.*PXY\n\n)
它匹配 ZKL 后跟一个新行,然后检查是否有一堆非换行字符后跟 PXY,然后是 2 个新行。
您可以将其替换为空格。
请注意,要使这适用于最后一节,您需要在文件末尾至少有两个新行。
演示
推荐阅读
- swift - SpriteKit:确定碰撞强度
- amazon-web-services - 需要客户端加密以处理雪花的帮助
- javascript - 打字稿将函数标记为实现接口
- php - Laravel 使用 Carbon::today 如何从日期时间字段中获取日期值?
- python - 在 Amazon Linux 上安装 locuplot
- ruby-on-rails - Rails Active Storage 使用默认存储服务而不是模型中定义的服务直接上传
- amazon-web-services - 如何连接到 REST API 作为 AWS QuickSight 中的数据源以创建报告?
- jaxb - 合并 XML 的最快方式 - 最佳架构
- php - 是否有一种方法可以计算 Shopware 6 中给定购物车的所有有效运输方式价格?
- flutter - 谷歌表格将日期值作为数字问题