replace - Notepad ++中有没有办法使用查找和替换来查找文本,然后替换后面几行的文本?
问题描述
我目前正在尝试通过一个文本文件工作,我需要在其中找到一个特定的文本字符串,然后替换该文本字符串之后几行的文本行。下面是一个文本示例:
<MyObjectBuilder_CubeBlock xsi:type="MyObjectBuilder_Conveyor">
<SubtypeName>LargeBlockConveyor</SubtypeName>
<EntityId>111664082437655291</EntityId>
<Min x="9" y="30" z="7" />
<BlockOrientation Forward="Right" Up="Up" />
<ColorMaskHSV x="0" y="-0.8" z="0.2" />
</MyObjectBuilder_CubeBlock>
在这种情况下,我需要搜索字符串MyObjectBuilder_Conveyor
,然后我需要实际编辑字符串ColorMaskHSV x="0" y="-0.8" z="0.2"
。
期望的结果是每个实例中的所有内容都MyObjectBuilder_Conveyor
将保持不变,唯一的变化是对ColorMAskHSV
行。
在这种特定情况下,一切都将保持不变,但z="0.2"
将更改为z="-0.15"
. 不幸的是,还有许多其他变体MyObjectBuilder_
,所有这些都需要保持不变,所以我不能只做一个查找/替换z="0.2"
中间的行是唯一的,因此它们不能被批量替换,并且文件中有超过 1000 个这样的条目,因此至少可以说手动编辑它们会很耗时。
有没有办法创建一个查找和替换表达式,或者可能是 Notepad++ 中的其他工具,可以简化这种事情?
解决方案
- Ctrl+H
- 找什么:
<MyObjectBuilder_CubeBlock(?:(?!</MyObjectBuilder_CubeBlock>).)+<ColorMaskHSV .+?z="\K[^"]+
- 用。。。来代替:
-0.15
- 检查 火柴盒
- 检查 环绕
- CHECK 正则表达式
- 查看
. matches newline
- Replace all
解释:
<MyObjectBuilder_CubeBlock # literally, open tag
# Tempered greedy token
(?: # non capture group
(?! # negative lookahead, make sure we haven't after:
</MyObjectBuilder_CubeBlock> # close tag
) # end lookahead
. # any character
)+ # end group, must appear 1 or more times
<ColorMaskHSV .+? # literally, open tag, followed by 1 or more any character, not greedy
z=" # literally
\K # forget all we have seen until this position
[^"]+ # 1 or more any character that is not double quote (i.e. the value to change)
截图(之前):
截图(之后):
推荐阅读
- java - SSLHandshakeException 与 jlink 创建运行时
- c - 即使 IF 语句为假,字符指针数组也会被覆盖
- javascript - Javascript井字游戏:如何提醒用户他赢了?
- c++ - 获取 __m256 变量中不为零的第一个元素的索引
- vb.net - 如果通过代理作业或 TSQL 运行,脚本任务中带有 SSRS 报告的 SSIS 包将不起作用
- django - 当表单中还存在其他字段时,获取图像的 content_type 的问题
- c++ - 如何降低这段代码的复杂度
- amazon-s3 - 使用 Amazon SES、Lambda 和 S3 跟踪内部和外部电子邮件的打开和点击?
- angular - 如何在 Angular 7 中等待 DOM 更改就绪?
- angular - 如何使用 Angular 在 Stackblitz 中导入 Lodash?