【问题标题】:Extract the requires text using Regular expression in notepad++在记事本++中使用正则表达式提取需要的文本
【发布时间】:2020-03-09 23:58:10
【问题描述】:

我有 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++ 中编写一个宏来查找特定文本并重复所有记录,但“多次运行宏”不起作用。是否有任何正则表达式方法来清除所有内容并将值保留在我提到的变量名旁边?我可以分别对每个变量重复此步骤。

感谢您的帮助

【问题讨论】:

标签: regex parsing notepad++


【解决方案1】:

试试这个,这是我能做到的。

查找内容:^.*?\*\*(.*?)\*\*&gt;|&lt;.*
替换为:$1 $1 后面的空格

【讨论】:

    【解决方案2】:

    虽然您应该考虑解析 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>
    

    ...各占一行。所以关闭自动换行并检查它们。您可能需要找到(在“扩展模式”下)...

    <?
    

    ...位并替换为...

    \r<?
    

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

    正则表达式...

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

    ...查找整行,如果替换为...

    $1$2$3
    

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

    <? 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 - 学习更多但功能强大。

    【讨论】:

    • 注意:初始替换可以分离出捕获的字符串,$1$2$3 可以是$1-|-$2---$3(或其他),如果这样更有帮助的话
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 2016-04-14
    • 2021-12-12
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多