早上好。我从设备返回以下行
♥☺i20100☺i2010018032809120110000074653B0F4465275D245EAA80042D82F5E000000004291D83C00000000022000007460042FD45FE7F2A4648C0004282FC0400000000429799E500000000033000007466A869946694E8145BCF80042EF811B00000000428CCAF400000000044000007461DFFC4461D1D61462B040042A15A6600000000428E635100000000&&C631♥
数据在日期时间戳之后以6个字符的块返回。我试图超过日期时间并查找以42开头的所有6个块。应该返回3个块。
使用Expresso,我可以获得所有 .*i20100.i20100(?<Date>.{10})(?<AANNTT>.{6})+
但是如何在每个子查询上创建子查询并返回以42开头的所有子查询?我认为可能是这样的:.*i20100.i20100(?<Date>.{10})(.{6})*(?<AANNTT>42.{4})+
但那只会返回最后一个。
提前致谢! -Dave
答案 0 :(得分:1)
您可以使用
(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)42.{4}
请参阅regex demo
<强>详情
(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)
- 与字符串中紧邻的字符串中的位置匹配的正向前瞻
i20100.i20100
- i20100
和char,但换行符i20100
(?<Date>.{10})(?:.{6})*?
- 组Date
匹配除换行符之外的10个字符,然后任意6个字符的重复次数,但换行符尽可能少42.{4}
- 42
,然后是换行符以外的任何4个字符