隔离大型 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
- 全部替换
屏幕截图(之前):
屏幕截图(之后):
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
第一次在这里求助,请不要吃我
我手上有一个又大又乱的 .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>
------------------------------------------------------------
这将重复大约一百次。我需要隔离
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
- 全部替换
屏幕截图(之前):
屏幕截图(之后):
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