Powershell / Regex / EDI的新功能。对于为什么不应该使用EDI的正则表达式进行此操作,请不要发表评论,我已经看到了警告,但别无选择。

我最需要的是基本的,但我需要一些帮助。我必须找到一个段的所有实例,并从中检索一个特定的元素值。被搜索的文本将被读为一个长字符串,没有CR / LF / etc。

示例数据:

~SV1*HC:V2020*35*UN*1***1~DTP*472*D8*20120807~REF*6R*
~SV1*HC:V2100:LT*28.98*UN*1***1~DTP*472*D8*20120807~REF*6R*
~SV1*HC:92014*165*UN*1***1~DTP*472*D8*20120716~REF*6R*

我在另一个网段上使用以下命令,它的运行方式与我想要的一样,但也不必考虑非单词字符:
Select-String -pattern '~svd\*\w+\*(\d+|\d+\.\d+)\*' -input $string -AllMatches | %{$_.Matches} | %{$_.Groups[1]} | %{$_.Value}

理想情况下,我想查找“〜SV1 *”的实例,跳到下一个星号,然后通过下一个星号阅读所有内容。这样,里面的字母/数字/字符都没关系,它会跳过它。在上面的数据示例中,我希望返回35、28.98、165。如果没有,那么我可以使用已有的东西,但是匹配单词/非单词字符的组合会抛出我,因为我没有知道它们可能以什么顺序存在。我玩过的所有其他东西都继续拉动其余的弦,并且没有正确停止。

如果我能做到这一点,我会很高兴:
~SV1*<skip this>*<get this>*<skip to next SV1>~SV1*<skip this>*<get this>*<skip to next SV1>

最后,要提取的数据是货币字段,因此它可能存在也可能不存在小数。如果有比(\ d + | \ d +。\ d +)更干净的方法,我全力以赴。

谢谢

最佳答案

使用如下模式:

 ~sv\d\*[^*]*\*([^*]*)\*

关于regex - EDI的Powershell正则表达式模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13199240/

10-10 11:58