当我在Notepad++中处理一个数据类型的文本列表时,我想把每行的属性值都改为 "无 "字,方法是把它们选入列选中,效果很好。
但是问题来了... 现在我在列表中完成了我想做的事情,我现在想把真正的id值与数字放在一起,可以替换所有的 "none "字,但是要用特定的方式。我正在做的那个列表实际上有近5千行,其中有2千行,包括多行重复的行。
由于这个原因,我必须承认,如果我决定手动操作的话,我将会有一个非常困难的时间,因为这个事情的痛苦性和长时间的工作......。也许有点棘手的解释,所以这里的例子。
<obj name="wall.ZOL" id="none"
<obj name="wall.ZOL" id="none"
<obj name="wall.ZOL" id="none"
<obj name="wall.XYZ" id="none"
<obj name="wall.XYZ" id="none"
<obj name="wall.XYZ" id="none" <------------- In my actual document
<obj name="wall.DOR" id="none"
<obj name="wall.DOR" id="none"
<obj name="wall.DOR" id="none"
<obj name="wall.BUL" id="none"
<obj name="wall.BUL" id="none"
<obj name="wall.BUL" id="none"
在上面的例子中,正如你所看到的,有12行,但它只包括4个不同类型的数据,因为只有名字的变化,所以让我们说这4种类型的数据只是4组重复的行。下面是第二个例子。
<obj name="wall.ZOL" id="4130"
<obj name="wall.ZOL" id="4130"
<obj name="wall.ZOL" id="4130"
<obj name="wall.XYZ" id="5340"
<obj name="wall.XYZ" id="5340"
<obj name="wall.XYZ" id="5340" <------------- How I would like it to be
<obj name="wall.DOR" id="1700"
<obj name="wall.DOR" id="1700"
<obj name="wall.DOR" id="1700"
<obj name="wall.BUL" id="9500"
<obj name="wall.BUL" id="9500"
<obj name="wall.BUL" id="9500"
在上面的第二个例子中,有完全相同的文本,但只有id发生了变化。正如你所看到的,数字是代替 "none "字的,同时尊重id只有在行中的name="[name]"改变时才会改变。
所以在这里,我真正能够做的是,例如按CTRL+H键时。
WHILE SEARCHING FOR...
<obj name="wall.ZOL" id="none"
<obj name="wall.XYZ" id="none"
<obj name="wall.DOR" id="none"
<obj name="wall.BUL" id="none"
...AND THEN "REPLACE BY" THIS...
<obj name="wall.ZOL" id="4130"
<obj name="wall.XYZ" id="5340"
<obj name="wall.DOR" id="1700"
<obj name="wall.BUL" id="9500"
...TO GET THE RESULT IN MY DOCUMENT LIKE THAT:
<obj name="wall.ZOL" id="4130"
<obj name="wall.ZOL" id="4130"
<obj name="wall.ZOL" id="4130"
<obj name="wall.XYZ" id="5340"
<obj name="wall.XYZ" id="5340"
<obj name="wall.XYZ" id="5340"
<obj name="wall.DOR" id="1700"
<obj name="wall.DOR" id="1700"
<obj name="wall.DOR" id="1700"
<obj name="wall.BUL" id="9500"
<obj name="wall.BUL" id="9500"
<obj name="wall.BUL" id="9500"
所以这是我想做的。尽管我找到了类似的案例,但我没有找到任何线程可以帮助我做完全相同的事情,完全相同的文本,知道有超过一千行的处理在我的。
我也试着在那个很好的Notepad++软件中搜索,但不幸的是,我没有找到任何允许它的选项,尽管我很确定它可以用regex命令或(也许?)一个插件扩展来做。如果有比我更了解的人可以帮助我,这将是巨大的(请)。
你最好用你喜欢的脚本语言写一个脚本。
但是,如果你真的想使用Notepad++,而且如果id的数量不是太多(因为会变得不可读),你可以做如下操作。
<obj name="wall\.(?:(ZOL)|(XYZ)|(DOR)|(BUL))" id="\Knone
(?{1}4130:(?{2}5340:(?{3}1700:(?{4}9500))))
解释:
<obj name="wall\. # literally
(?: # non capture group
(ZOL) # group 1
| # OR
(XYZ) # group 2
| # OR
(DOR) # group 3
| # OR
(BUL) # group 4
# you can add more groups if you need them.
) # end group
" id=" # literally
\K # forget all we have seen until this position
none # literally
替换。
(?{1} # if group 1 exists (i.e. "ZOL")
4130 # id value for "ZOL"
: # else
(?{2} # if group 2 exists
5340 # value for "XYZ"
: # else
(?{3} # if group 3 exists
1700 # value for "DOR"
: # else
(?{4}9500) # if group 4 exists, value for "BUL"
) # endif
) # endif
) # endif
截图(前)。
截图(后)。