RegEx - 在引号之间查找文本并在括号之间替换

时间:2013-08-04 04:03:11

标签: regex replace find quotes parentheses

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

所有初始代码都必须进行编辑,因此可以添加更多功能,而且我需要逐个手动编辑大约1200个ID。所以我想也许Notepad ++可以使用RegEx函数为我做整个编辑。

问题是,我需要检索来自第2行的ID,这是白色报价,然后将此ID放在第1行必须在括号之间。此步骤将重复多次,因此不是第2行和第1行,下一组将是第4行和第3行,依此类推。

示例:

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

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

这是我一直使用的代码,它匹配ItemID =“”

中的文本
(?<=ItemID=")(?:\\.|[^"\\])*(?=")

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

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

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

有没有人知道我可以使用什么?

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

3 个答案:

答案 0 :(得分:0)

你可以使用notepad ++ macro而不是regex。将你的crusor放在你的第二行,按home然后点击menu macro&gt;开始录制,然后执行以下步骤:

  1. ctrl + right_arrow(直到你的号码,可能是三次)
  2. CTRL + SHIFT + RIGHT_ARROW
  3. CTRL + C(复制)
  4. up_arrow
  5. ctrl + right_arrow(直到你的号码,可能是三次)
  6. CTRL + SHIFT + RIGHT_ARROW
  7. CTRL + V(粘贴)
  8. 然后stop recording和pres run macro multiple times > until the end of file > run

答案 1 :(得分:0)

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

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

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

并替换为:

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

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

答案 2 :(得分:0)

这可以在Windows上的Notepad ++ 中使用

假设这是文字:

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

控制+ H:

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

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

此处解释了换行问题:Notepad++ newline in regex

实际上有两个正则表达式捕获,\1用于11111标记,\2用于ItemID编号。没有必要使用11111标签。

这有点涉及,但它假设一些严格(捕获表达式在第2行上工作),

  • 换行符分隔ItemID和InbagCount行。
  • 替换包含在上一行的括号内
  • ItemID被双引号
  • 包围