在记事本++中使用正则表达式提取需要的文本

Extract the requires text using Regular expression in notepad++

我有 10,000 个字符长度的 xml 文本,我必须解析出它旁边的变量名称和值。

 example of text:

 <? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18- 
 05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>
 <? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18- 
 05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>

在上面的文本中,我有两个变量 ToDateTimestamp 和 shAmount 的数据

Want:

ToDateTimestamp 2019-01-01T10:41:18-05:00
ToDateTimestamp 2019-02-01T10:41:18-05:00
shAmount 8000.00
shAmount 7000.00

我试图在 notepad++ 中编写一个宏来查找特定文本并重复所有记录,但 "Run macro multiple times" 不起作用。是否有任何正则表达式方法来清除所有内容并将值保留在我提到的变量名称旁边?我可以分别为每个变量重复此步骤。

感谢您的帮助

虽然您应该考虑解析 HTML/XML,但我总是使用 Notepad++ 来清理数据。你可能需要一些努力,但抛给你一些可能有帮助的东西......

https://regex101.com/r/uAPi97/1

现在上面的内容基本上是基于获取...的所有行...

<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18-05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>

...每行占一行。所以关闭自动换行并检查它们。您可能需要找到(在 'Extend mode' 中)...

<?

...位并替换为...

\r<?

...举个例子。然后你可以(也许)使用正则表达式找到整行(你必须找到整行),然后捕获感兴趣的位(这些被包裹在 () 中所以它们被捕获)。然后在 Notepad++ 中进行查找和替换,但选择正则表达式模式。

正则表达式...

^.*?(\d+-\d+-\d+T\d+:\d+:\d+-\d+:\d+).*(shAMount).*?(\d+\.\d+).*$

...找到整行,如果您替换为...


...然后放回正则表达式中 () 中的三位。所以这个...

<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-01-01T10:41:18-05:00</xyzefg><**shAMount**>8000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>
<? xml version="1.0" of encoding="UTF-8"?><abcdefghij><**ToDateTimestamp**>2019-02-01T10:41:18-05:00</xyzefg><**shAMount**>7000.00</afsfda;sfkj;alkfl;kaf>

..有点像这个...

2019-01-01T10:41:18-05:00shAMount8000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00
2019-02-01T10:41:18-05:00shAMount7000.00

可能不是您想要的 100%,但您可以从那里进一步清理它,然后说,找到(在扩展模式下)'shAMount'(不带引号)并替换为 '\rshAMount'(不带引号)。查找和替换的几个循环,你可能更接近你的目标。

但是是的......如果你经常这样做,请查看 Python 和 HTML Parser - 需要学习更多但非常强大。

试试这个,这是我能做的最好的。

查找内容:^.*?\*\*(.*?)\*\*>|<.*
替换为:

之后的 A space