REGEX为Excel格式化大量转储文件

时间:2018-09-24 19:36:01

标签: regex excel regex-negation regex-lookarounds regex-group

The Problem 我在REGEX上遇到了问题,并将其用于我需要做的事情。我需要将数个转储文件中的两百万行放入可使用的电子表格中。

这是我所能得到的。

问题是试图将它们全都分开给我,因为excel无法很好地导入它们。

我遇到了一个麻烦,如果这些项目不是列表中的下一个项目,那么它们根本就不会匹配。

另一个问题是,对象与对象之间的行并不总是以相同的特定顺序列出

这是让我走得最远的REGEX,但现在我已经完全陷入困境了。

(?<=^Object\s{3})(\w*).(?:^Type\s{2,3}(\S*).*?)*.(?:^DeviceId\s{2,3}(\S*).*?)*.(?:^Alias\s{2,3}(\S*).*?)*(?:^InstanceId\s{2,3}(\S*).*?)*.(?:^Description\s{2,3}(\S*).*?)*.(?:^Location\s{2,3}(\S*).*?)*.(?:^NetworkId\s{2,3}(\S*).*?)*.(?:^SerialNum\s{2,3}(\S*).*?)*.(?:^DefaultRouter\s{2,3}(\S*).*?)*.(?:^EthernetId\s{2,3}(\S*).*?)*.(?:^IPAddress\s{2,3}(\S*).*?)*.(?:^SubnetMask\s{2,3}(\S*).*?)*.(?:^PPPSubnetMask\s{2,3}(\S*).*?)*.(?:^Port\s{2,3}(\S*).*?)*.(?:^DefaultPort\s{2,3}(\S*).*?)*.(?:^BACnetDeviceId\s{2,3}(\S*).*?)*.(?:^BacnetMSTPNetNum\s{2,3}(\S*).*?)*.(?:^Baud\s{2,3}(\S*).*?)*.(?:^DefaultBaud\s{2,3}(\S*).*?)*.(?:^Channel\s{2,3}(\S*).*?)*.(?:^VersionNum\s{2,3}(\S*).*?)*.(?:^Properties\s{2,3}(\S*).*?)*.(?:^FullName\s{2,3}(\S*).*?)*.(?:^Password\s{2,3}(\S*).*?)*.(?:^SecurityLevel\s{2,3}(\S*).*?)*.(?:^CreatedBy\s{2,3}(\S*).*?)*.(?:^Owner\s{2,3}(\S*).*?)*.(?:^InfinetCtlr\s{2,3}(\S*).*?)*.(?:^InfinetId\s{2,3}(\S*).*?)*.(?:^RefreshRate\s{2,3}(\S*).*?)*.(?:^Format\s{2,3}(\S*).*?)*.(?:^Value\s{2,3}(\S*).*?)*.(?:^DBQualifier\s{2,3}(\S*).*?)*.(?:^DatabaseMode\s{2,3}(\S*).*?)*.(?:^LogIntervalSecs\s{2,3}(\S*).*?)*.(?:^LogType\s{2,3}(\S*).*?)*.(?:^Units\s{2,3}(\S*).*?)*.(?:^Param1\s{2,3}(\S*).*?)*.(?:^Param3\s{2,3}(\S*).*?)*.(?:^Param4\s{2,3}(\S*).*?)*.(?:^Param5\s{2,3}(\S*).*?)*.(?:^Param6\s{2,3}(\S*).*?)*.(?:^DefaultMode\s{2,3}(\S*).*?)*.(?:^XdriverFile\s{2,3}(\S*).*?)*.*?(?=^EndObject)

这是我要获取的数据示例:

   Object    CHWDifPrs07
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWDifPrs07
    CreateTime   5/10/2011 12   2   23 PM
    TimeLocked   6/16/2014 12   10  54 PM
    InstanceId   7439/17
    Channel     15
    Description      CHW DP 7


    Export   True
    Format   #.##
    Size    400
    Port

    Units    Psi
    EndObject

    Object   CHWRTmp05
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWRTmp05
    CreateTime   5/10/2011 12   2   22 PM
    TimeLocked   6/16/2014 12   11  17 PM
    InstanceId   7439/12
    Channel     14
    Description      CHWR Temp 5

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   CHWRTmp06
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWRTmp06
    CreateTime   5/10/2011 12   2   23 PM
    TimeLocked   5/11/2011 4    43  48 PM
    InstanceId   7439/13
    Channel     12
    Description      ChwR Temp 6

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   CHWRTmp07
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWRTmp07
    CreateTime   5/10/2011 12   2   23 PM
    TimeLocked   5/11/2011 9    29  45 AM
    InstanceId   7439/14
    Channel     17
    Description      CHWR Temp 7

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   CHWSTmp05
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWSTmp05
    CreateTime   5/10/2011 12   2   22 PM
    TimeLocked   8/15/2014 10   25  30 AM
    InstanceId   7439/9
    Channel     13
    Description      CHWS Temp 5

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   CHWSTmp06
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWSTmp06
    CreateTime   5/10/2011 12   2   22 PM
    TimeLocked   5/11/2011 9    29  59 AM
    InstanceId   7439/10
    Channel     11
    Description      ChWS Temp 6

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   CHWSTmp07
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    CHWSTmp07
    CreateTime   5/10/2011 12   2   22 PM
    TimeLocked   5/11/2011 9    30  6:00 AM
    InstanceId   7439/11
    Channel     16
    Description      CHWS Temp 7

    Export   True
    Format   ###.##
    Size    400
    Port

    Units    Deg.F
    EndObject

    Object   SpaceRHF13
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    SpaceRHF13
    CreateTime   5/10/2011 12   2   22 PM
    AlarmInfo    True
    TimeLocked   8/27/2014 12   34  1:00 PM
    InstanceId   7439/8
    Channel     18
    Description      Space Relative Humidity F.13



    Export   True
    Format   %#.#
    Size    96
    Port


    ExtLogEnable     True
    AlarmLinks
    Root\Mia_SpaceRH_Hi     1    Enabled
    Root\Mia_SpaceRH_Low    2    Enabled
    EndObject

    Object   SpaceRHF15
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    SpaceRHF15
    CreateTime   5/10/2011 12   2   22 PM
    AlarmInfo    True
    TimeLocked   8/27/2014 12   33  35 PM
    InstanceId   7439/7
    Channel     20
    Description      Space Relative Humidity F.15



    Export   True
    Format   %###.#
    Size    96
    Port


    ExtLogEnable     True
    AlarmLinks
    Root\Mia_SpaceRH_Hi     1    Enabled
    Root\Mia_SpaceRH_Low    2    Enabled
    EndObject

    Object   SpaceRHH15
    Type     InfinityInput
    DeviceId     Terremark.FL\S300_3SC\S300_M08
    Alias    SpaceRHH15
    CreateTime   5/10/2011 12   2   22 PM
    AlarmInfo    True
    TimeLocked   11/4/2015 11   50  5:00 AM
    InstanceId   7439/6
    Channel     22
    Description      Space Relative Humidity H.15

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 regexr.com/40506

只花了几分钟时间就了解了东西实际上是如何工作的。

对于遇到此问题的其他人:如果您在notepad ++中有10个以上的组,则在使用查找/替换时请给它们加上$ 10,$ 11,$ 12等...

*有制作或破坏正则表达式的习惯

(?:这些一次性小组内部仍然可以有(捕获小组))?而且,您还可以使整个条件成为条件。

在某些内容后面加上*表示无论如何都要匹配,如果您想像我一样将空的组设置为保持列格式非常有用。