regex - EDI 的 Powershell 正则表达式模式

标签 regex powershell edi

Powershell/Regex/EDI 的新功能。请不要评论为什么这不应该用 EDI 的正则表达式完成,我已经看到警告,但别无选择。

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

示例数据:

~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+) 更简洁的方法,我完全赞成。

谢谢

最佳答案

一个起点,但你需要测试它:

Select-String -pattern '(?<=~sv\d\*.*\*)(\d*\.?\d+)(?=\*un)' -input $string -AllMatches | %{$_.Matches} | % {$_.Groups[1]} | %{$_.Value}

使用您的示例数据返回 35、28.98、165。

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

相关文章:

MySQL 和 Regex(检查正确名称大写)

powershell - Get-ChildItem递归排除不排除文件夹

powershell - 如何从命令提示符将命名数组参数传递给其中有空格的 powershell 脚本?

testing - ansi x12 消息中的测试指示符是什么意思?

php - 使用正则表达式将字符串拆分成句子

c# - 通过括号拆分字符串

Java XML 到 EDI 设计

java - EDI 到 XML 转换

grep 中的正则表达式先行查找 'not followed by'

powershell - 使用 powershell 加载 ntuser.dat