You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式:匹配设备返回数据中时间戳后的多组6字符块

正则表达式多捕获实现方案

嗨,咱们来一步步搞定这个设备数据的正则解析需求。先明确下我们要处理的内容:

原始设备返回数据:♥☺i20100☺i2010018032809120110000074653B0F4465275D245EAA80042D82F5E000000004291D83C00000000022000007460042FD45FE7F2A4648C0004282FC0400000000429799E500000000033000007466A869946694E8145BCF80042EF811B00000000428CCAF400000000044000007461DFFC4461D1D61462B040042A15A6600000000428E635100000000&&C631♥

你的需求很清晰:跳过开头的时间戳部分,捕获时间戳之后所有连续的6字符块。下面分步骤来实现:

第一步:定位时间戳的结束位置

观察数据可以看到,时间戳是☺i20100☺i之后的那串数字20100180328091201100000,它后面紧跟着第一个目标6字符块74653B。

要精准跳过时间戳,我们可以用正则的正向预查来确保匹配到时间戳的结尾,刚好停在第一个6字符块之前。

第二步:捕获所有6字符块

跳过时间戳后,我们需要抓取所有连续的6字符段,同时要忽略末尾的无效内容&&C631♥。

两种实用实现方案

方案一:分两步处理(更易调试)

这个方法把任务拆成两个简单的步骤,方便验证每一步的结果:

  1. 提取有效中间段:先把时间戳之后、末尾&&之前的所有十六进制字符提取出来

    ^.*?\d+([0-9A-F]+)&&.*$
    
    • ^.*?\d+:从开头非贪婪匹配到时间戳的数字结尾
    • ([0-9A-F]+):捕获所有目标6字符块拼接成的字符串
    • &&.*$:匹配末尾的无效内容,将其排除在捕获组外
  2. 拆分6字符块:把第一步捕获到的字符串,用下面的正则配合全局标志g,就能得到所有独立的6字符块:

    ([0-9A-F]{6})
    

方案二:单正则全局捕获(一步到位)

如果想一次性完成,用下面的正则配合全局标志g,就能直接跳过时间戳并捕获所有符合要求的6字符块:

(?<=^.*?\d+)[0-9A-F]{6}(?=.*&&)
  • (?<=^.*?\d+):正向断言,确保当前位置在时间戳之后
  • [0-9A-F]{6}:匹配并捕获我们需要的6字符块
  • (?=.*&&):正向断言,确保当前位置在末尾无效内容之前

捕获结果示例

用你的数据测试,会得到这些(以及后续所有符合的)6字符块:

  • 74653B
  • 0F4465
  • 275D24
  • 5EAA80
  • 042D82

注意事项

  • 如果设备可能返回小写的十六进制字符(比如a-f),可以把正则中的[0-9A-F]改成[0-9A-Fa-f],或者开启正则的不区分大小写匹配(标志i)。
  • 如果时间戳有固定长度(比如20位数字),可以把\d+替换成\d{20},这样匹配会更精准,性能也更好。

内容的提问来源于stack exchange,提问作者fldavem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:14