String Powershell代码,用于提取字符串中两个星号之间的数字

String Powershell代码,用于提取字符串中两个星号之间的数字,string,powershell,parsing,substring,String,Powershell,Parsing,Substring,我知道这应该很容易,我已经用谷歌搜索了h$!|滚开!但我想不出来。我需要这个数字,在本例中是101,它位于~GE*和下一个*之间,它都嵌入在一个相当粗糙的数据字符串中。下面是数据的示例字符串: ISA*00*00 ZZDIANER*ZZ*8888*200401*1305*^*00501*000044761*1*p*:~GSHCDIANER*888*20200401*130536*44761*X*005010X222A1~ST*837*59892*005010X222A1~SE*50*59892~

我知道这应该很容易,我已经用谷歌搜索了h$!|滚开!但我想不出来。我需要这个数字,在本例中是101,它位于~GE*和下一个*之间,它都嵌入在一个相当粗糙的数据字符串中。下面是数据的示例字符串:

ISA*00*00 ZZDIANER*ZZ*8888*200401*1305*^*00501*000044761*1*p*:~GSHCDIANER*888*20200401*130536*44761*X*005010X222A1~ST*837*59892*005010X222A1~SE*50*59892~GE*101*44761~IEA*1*000044761~

$test = 'ISA*00* 00 ZZDIANER *ZZ*88888 *200401*1305*^*00501*000044761*1*P*:~GSHCDIANER*88888*20200401*130536*44761*X*005010X222A1~ST*837*59892*005010X222A1~SE*50*59892~GE*101*44761~IEA*1*000044761~'

[regex]$r = 'GE\*.*\*44761'
$r.Matches($test).Value

这里的主要警告是,如果.Matches()返回多个值,则需要收紧正则表达式或遍历匹配项以找到实际需要的值,并且需要删除多余的值。。。希望这些数据的某些方面是一致的,否则这将是一个毫无结果的尝试。

如果不了解更多情况,这是一个很难回答的问题。但是,如果可以假设数据的结构是由星号分隔的一组数据点,并且元素数始终相同,那么要提取值,只需将字符串拆分为星号,并引用数组中的适当位置:

$data = "ISA*00* 00 ZZDIANER *ZZ*88888 *200401*1305*^*00501*000044761*1*P*:~GSHCDIANER*88888*20200401*130536*44761*X*005010X222A1~ST*837*59892*005010X222A1~SE*50*59892~GE*101*44761~IEA*1*000044761~"

$data.Split("*")[24]
以上将返回:101

如果您知道该值始终位于字符串中完全相同的位置,则上述方法有效

如果它可以移动,那么您可以尝试通过模式匹配找到它-即,查找*的模式、三个数字和另一个*(但数据可能包含与该模式匹配的另一段),或者如果该值之前始终有另一个可识别的值,您可以搜索它,然后拉下一段,这将是您正在寻找的值


这实际上取决于数据集的详细信息。

您可以使用
$null=$string-match'~GE\*(\d+)\*$匹配.1
。但是,我想你希望它更动态地工作,是吗?这个场景的问题是有很多对星号。你怎么知道会是哪一对呢?[1]这应该是一条线吗?[2] 请用代码格式包装样本数据,使其可读。。。为了防止降价吃掉一些角色。对不起,李,这里是新手。我正在学习。非常感谢您的快速回复。我要是早点请求帮助就好了。我可能还有头发。我现在就试试,然后再发一次,但要回答你关于多场比赛的问题,总是只会出现一次~GE*(著名的临终遗言)。效果很好!再次感谢,我撒了一点谎。因为44761不是一个常数,所以我不得不调整正则表达式。但这让我走上了正确的道路。这是一个好主意,但我最终使用了尼姆的分割函数。在我的文件中,它在其他方面也很有效。非常感谢您的投入!我从中学到了很多。我喜欢这种方法。实际上,由于PHI,我删除了我的样本数据,所以我的目标从一开始就不是24;然而,它始终是来自“标记”的一组星号。例如,我刚刚发现我还需要提取~SE*之后第二个和第三个星号之间的值。麻烦你告诉我如何使用这个策略,但以~SE*为起点?非常感谢你!我刚刚有了一个惊人的发现,我可以在分割函数的方括号之间使用负数!!这样我就能得到我所需要的。太酷了!!!谢谢。很抱歉,我没有监控,因为我认为您选择了另一个选项-您是否解决了所有问题,或者是否还有其他问题?没问题。是的,我现在已经准备好了。在很多事情上也使用SPLIT。谢谢你的意见。