隔离大型 xml 文件中的文本

Isolating text in a large xml file

第一次在这里求助,请不要吃我

我手上有一个又大又乱的 .xml 文件。它的结构是这样的:

<SPEAKER N°001>ERROR</SPEAKER N°001>
<ORIGINAL N°001>
TEXT THAT INTERESTS ME1
TEXT THAT INTERESTS ME1
</ORIGINAL N°001>
<JAPANESE N°001>
ツートンカラーの群れはグルグルと回り続け、
三方向から催眠動画を見せられているかのような錯覚に
陥る戦刃だが、それでも、彼女の表情は凍ったままだ。
</JAPANESE N°001>
<TRANSLATED N°001>

</TRANSLATED N°001>
<COMMENT N°001>

</COMMENT N°001>
------------------------------------------------------------
<SPEAKER N°002>ERROR</SPEAKER N°002>
<ORIGINAL N°002>
TEXT THAT INTERESTS ME2
</ORIGINAL N°002>
<JAPANESE N°002>
寧ろ、この異様な状況を前に、【超高校級の軍人】は
一際心が平静になりつつある。
</JAPANESE N°002>
<TRANSLATED N°002>

</TRANSLATED N°002>
<COMMENT N°002>

</COMMENT N°002>
------------------------------------------------------------

这将重复大约一百次。我需要隔离 number> 标签中的文本并删除其他所有内容,因此最终结果如下所示:

TEXT THAT INTERESTS ME1
TEXT THAT INTERESTS ME1
TEXT THAT INTERESTS ME2
...
TEXT THAT INTERESTS ME254

我有一个使用宏和 search/replace 函数的想法,但我终究无法让它发挥作用。该文件太长,无法手动执行。我正在使用记事本++,但如果使用其他程序更容易,请告诉我。

此外,如果这个问题重复,抱歉。

这里有一个方法:

  • Ctrl+H
  • 查找内容:(?:(?!<ORIGINAL.+?>).)*<ORIGINAL.+?>\R*((?:(?!</ORIGINAL.+?>).)+)(?:</ORIGINAL.+?>(?:(?!<ORIGINAL.+?>).)*)
  • 替换为:</code></li> <li><strong>检查</strong> <em>匹配大小写</em></li> <li><strong>检查</strong> <em>环绕</em></li> <li><strong>检查</strong> <em>正则表达式</em></li> <li><strong>检查</strong> <code>. matches newline
  • 全部替换

Demo & explanation

屏幕截图(之前):

屏幕截图(之后):

powershell 小菜一碟:)

另外:您的 XML 无效。

  • CTRL + R
  • 类型powershell
  • 输入,出现蓝色window。如果不是,你可能在 linux :P
  • 键入下面的行,但将 D:\t.txt 替换为您的路径:
(Get-Content D:\t.txt -Raw ) | Select-String -Pattern "(?smi)<ORIGINAL.*?>(.*?)</ORIGINAL" -AllMAtches | % {$_.Matches} | %{$_.Groups[1].ToString().Trim()}

我的输出是

TEXT THAT INTERESTS ME1
TEXT THAT INTERESTS ME1
TEXT THAT INTERESTS ME2