Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-在引号之间查找文本并在括号之间替换_Regex_Replace_Find_Quotes_Parentheses - Fatal编程技术网

Regex 正则表达式-在引号之间查找文本并在括号之间替换

Regex 正则表达式-在引号之间查找文本并在括号之间替换,regex,replace,find,quotes,parentheses,Regex,Replace,Find,Quotes,Parentheses,好的,我正在开发一个概要文件,其中包含很多对象的ID 所有的初始代码都需要编辑,这样才能添加更多的功能,而我需要一个接一个地手动编辑大约1200个ID。所以我想也许记事本++可以使用正则表达式函数为我做整个编辑 然而,问题是,我需要从第2行中检索ID,该ID用引号括起来,然后将该ID放入第1行,该行必须位于括号之间。此步骤将重复多次,因此下一组将不是第2行和第1行,而是第4行和第3行,依此类推 例如: Line 1: < InbagCount(11111) /> Line 2: &l

好的,我正在开发一个概要文件,其中包含很多对象的ID

所有的初始代码都需要编辑,这样才能添加更多的功能,而我需要一个接一个地手动编辑大约1200个ID。所以我想也许记事本++可以使用正则表达式函数为我做整个编辑

然而,问题是,我需要第2行中检索ID,该ID用引号括起来,然后将该ID放入第1行,该行必须位于括号之间。此步骤将重复多次,因此下一组将不是第2行和第1行,而是第4行和第3行,依此类推

例如:

Line 1: < InbagCount(11111) />
Line 2: < ItemID="12345" />
Line 3: < InbagCount(11111) />
Line 4: < ItemID="543" />
第1行:
第2行:
第4行:
现在,我需要用下一行的ItemID替换所有的11111

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


(?您可以使用记事本++宏而不是正则表达式。将游标放在第二行,按home键,然后单击menu macro>start recording,然后执行以下步骤:

  • ctrl+右箭头(直到你的号码,可能三次)
  • ctrl+shift+右箭头
  • ctrl+c(复制)
  • 向上箭头
  • ctrl+右箭头(直到你的号码,可能三次)
  • ctrl+shift+右箭头
  • ctrl+v(粘贴)

  • 然后
    停止录制
    ,并按住
    多次运行宏>,直到文件结束>运行

    我无法使用记事本++进行测试,因为我不使用Windows,但如果我正确理解了您的请求,它是一个简单的正则表达式。该键跨行边界匹配。如果一次匹配两行,请为te使用捕获组有问题的xt和重建这两条线

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

    .*?ItemID="(\d+)" />
    
    并替换为:

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

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

    这将在Windows上的记事本++中运行,如您所愿

    假设这是文本:

    < InbagCount(11111) />
    < ItemID="12345" />
    < InbagCount(11111) />
    < ItemID="54321" />
    
    
    
    
    Ctrl+H:

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

    在“替换为:”
    \(\2\)/>\n

    新行问题解释如下:

    实际上有两个正则表达式捕获,
    \1
    用于11111标记,而
    \2
    用于ItemID号。11111标记不需要一个正则表达式捕获

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

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

    你是怎么找到那个正则表达式的?它试图匹配反斜杠
    \
    和点
    。你觉得它有意义吗?嗯,我在stackoverflow的某个地方找到了它,它最初用于查找引号之间的ID。但在尝试替换时它没有任何作用。请看我的答案,它可以使用Notepad++和RegHa,虽然这是一个聪明的建议,但它不会起作用。原因是ItemID有时会有3个字符长,有时会有4或5个字符长。感谢您的尝试!这就是为什么我使用ctrl,这忽略了lengthLol,这太神奇了,我不知道ctrl的诀窍。我想也可以这样做,但另一位先生也发了帖子使用正则表达式的解决方案,结果是“更少”工作。不过也谢谢你,这应该很好!你先生是我的英雄,有点。你链接的那个网站允许我做我在Notepad++中做不到的事情。出于某种原因,当我输入完全相同的搜索时,它不会接受\n,即使我勾选了正则表达式。无论如何,谢谢你。
    < InbagCount($1) />\n< ItemID="$1" />\n
    
    < InbagCount(11111) />
    < ItemID="12345" />
    < InbagCount(11111) />
    < ItemID="54321" />