1

早上好。我从设备返回以下行

♥☺i20100☺i2010018032809120110000074653B0F4465275D245EAA80042D82F5E000000004291D83C00000000022000007460042FD45FE7F2A4648C0004282FC0400000000429799E500000000033000007466A869946694E8145BCF80042EF811B00000000428CCAF400000000044000007461DFFC4461D1D61462B040042A15A6600000000428E635100000000&&C631♥

数据在日期时间戳之后以 6 个字符的块形式返回。我试图超越日期时间并查找以 42 开头的所有 6 块。应该返回 3 个块。
使用 Expresso,我可以得到所有的块.*i20100.i20100(?<Date>.{10})(?<AANNTT>.{6})+

但是我怎样才能对其中的每一个进行子查询并返回所有以 42 开头的子查询呢?我想可能是这样的:.*i20100.i20100(?<Date>.{10})(.{6})*(?<AANNTT>42.{4})+

但这只是返回最后一个。

提前致谢!-戴夫

4

1 回答 1

1

您可以使用

(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)42.{4}

查看正则表达式演示

细节

  • (?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)- 与字符串中紧随其后的位置匹配的正向前瞻
    • i20100.i20100-i20100和 char 但换行符,i20100
    • (?<Date>.{10})(?:.{6})*?-Date匹配除换行符以外的 10 个字符的组,然后匹配除换行符之外的任何 6 个字符的任何 0+ 次重复,尽可能少
  • 42.{4}-42然后是除换行符以外的任何 4 个字符

在此处输入图像描述

于 2018-03-28T19:40:23.433 回答