1

好的,我正在处理一个包含许多对象 ID 的配置文件。

所有初始代码都必须编辑,以便添加更多功能,大约 1200 个 ID,我必须手动一个一个地编辑。所以我想也许 Notepad++ 可以使用 RegEx 函数为我完成整个编辑。

然而,问题是我需要从第 2 行检索带有引号的 ID,然后将此 ID 放在必须在括号之间的第 1 行中。此步骤将重复多次,因此下一组将是第 4 行和第 3 行,而不是第 2 行和第 1 行,依此类推。

例子:

Line 1: < InbagCount(11111) />
Line 2: < ItemID="12345" />
Line 3: < InbagCount(11111) />
Line 4: < ItemID="543" />

现在,我需要将所有11111替换为下一行的 ItemID。

这是我一直在使用的代码,它与 ItemID="" 中的文本匹配

(?<=ItemID=")(?:\\.|[^"\\])*(?=")

它可以找到它们,但是当我单击“替换”按钮时,会发生这种情况:

InbagCount(?<=ItemID="?:\.|[^"\]*?=")

也许 Notepad++ 不是这项工作的工具。

有谁知道我可以使用什么?

在此先感谢,如果您能帮助我,我将不胜感激:)

4

3 回答 3

0

这将根据您的需要在 Windows 上的 Notepad++ 中工作

假设这是文本:

< InbagCount(11111) />
< ItemID="12345" />
< InbagCount(11111) />
< ItemID="54321" />

Ctrl+H:

在“查找内容:”中\(([0-9]*).*\r\n.*"([0-9]*)"

在“替换为:”中\(\2\) />\n< ItemID="\2"

换行问题在这里解释:Notepad++ newline in regex

实际上有两个正则表达式捕获,\1用于 11111 标记和\2ItemID 编号。11111 标签的标签不是必需的。

这有点复杂,但它假定了一些严格性(捕获表达式在第 2 行有效),即

  • 换行符分隔 ItemID 和 InbagCount 行。
  • 替换包含在上一行的括号内
  • ItemID 用双引号括起来
于 2013-08-04T05:09:00.463 回答
0

您可以使用 notepad++ 宏而不是正则表达式。将光标放在第二行,按主页然后单击菜单宏>开始录制,然后执行以下步骤:

  1. ctrl+right_arrow(直到你的号码,可能三次)
  2. ctrl+shift+right_arrow
  3. ctrl+c(复制)
  4. 向上箭头
  5. ctrl+right_arrow(直到你的号码,可能三次)
  6. ctrl+shift+right_arrow
  7. ctrl+v(粘贴)

然后stop recording, 并按下run macro multiple times > until the end of file > run

于 2013-08-04T04:34:29.753 回答
0

我无法使用 Notepad++ 进行测试,因为我没有 Windows,但如果我正确理解您的请求,它就是一个简单的正则表达式。关键是跨行边界匹配。您一次匹配两行,对有问题的文本使用捕获组并重建这两行。

因此,例如,您可以匹配:

.*?ItemID="(\d+)" />

并替换为:

< InbagCount($1) />\n< ItemID="$1" />\n

如本网站所示。您可以使用该网站实际转换您的代码。

于 2013-08-04T04:38:13.957 回答