gpt4 book ai didi

regex - 在连续行中查找 3 个不同数字的正则表达式是什么?

转载 作者:行者123 更新时间:2023-12-02 18:04:38 24 4
gpt4 key购买 nike

假设我有以下类型的数据:

[577]   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
[578] {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
[579] {0x05,0x08,0x01,0x00,0x47,0x00,0x61,0x00,0x6c}
[580] {0x05,0x08,0x01,0x00,0x47,0x00,0x61,0x00,0x6c}
[581] {0x05,0x08,0x01,0x00,0x47,0x00,0x61,0x00,0x6c}
[582] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[583] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[584] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[585] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[586] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[587] {0x04,0x08,0x00,0x00,0x61,0x00,0x78,0x00,0x79}
[588] {0x03,0x08,0x00,0x00,0x20,0x00,0x53,0x00,0x32}
[589] {0x03,0x08,0x00,0x00,0x20,0x00,0x53,0x00,0x32}
[590] {0x03,0x08,0x00,0x00,0x20,0x00,0x53,0x00,0x32}
[591] {0x03,0x08,0x00,0x00,0x20,0x00,0x53,0x00,0x32}
[592] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[593] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[594] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[595] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[596] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[597] {0x02,0x08,0x00,0x00,0x32,0x00,0x2b,0x00,0x20}
[598] {0x01,0x08,0x00,0x00,0x2d,0x00,0x39,0x00,0x33}
[599] {0x00,0x08,0x00,0x00,0x34,0x00,0x00,0x00,0x00}
[600] {0x00,0x08,0x00,0x00,0x34,0x00,0x00,0x00,0x00}
[601] {0x00,0x08,0x00,0x00,0x34,0x00,0x00,0x00,0x00}
[602] {0x00,0x08,0x00,0x00,0x34,0x00,0x00,0x00,0x00}

相关数据在大括号{}之间。

我想找到第一列不重复的位置。

在上面的数据中,这将针对标记为“[598]”的行。因为行“[597]”以“0x02”开头,而行“[599]”以“0x00”开头。所以“0x01”是唯一的。

但“0x01”很可能是“0x09”。我的意思是数字本身并不重要,只要它与其上方和下方的行不同即可。不过,只有第一列很重要。

我一直在尝试使用 Lookarounds,但它不起作用:

(?<!.*\{(\3).*\n)(.*\{(0x\d\d))(?!.*\n.*\{(\3))

有什么想法吗?

注释:

  • 我正在使用 VSCode 进行查找。
  • 不需要捕获它,只是希望它突出显示。

最佳答案

我认为以下内容适合您的需求(对 Andrej 略有改进,并进行了调整以支持 JavaScript 的 flavor 正则表达式,我相信这就是 VSCode 使用的)。

Regex101

^\[\d+\]\s+{([^,]+)[^[]+^\[\d+\]\s+{((?!\1)[^,]+)[^[]+^\[\d+\]\s+{((?!\2)[^,]+)[^[]+$

注释:

  • JavaScript 正则表达式似乎不支持 (?!\1|\3) 负向先行语法,因此我将其替换为单个反向引用 2-vs-1,并且3对2
    • 因此,如果第一行和第三行在第一个元素中具有相同的值,那么它仍然会匹配,这并不理想......
  • 匹配完整的行和字段(如果您也需要/想要使用它进行处理)
  • 这通过三个不同的线路进行操作:
    1. ^\[\d+\]\s+{([^,]+)[^[]+
      • [] 方括号包围的数字部分以及 {} 大括号中的第一个元素匹配
    2. ^\[\d+\]\s+{((?!\1)[^,]+)[^[]+
      • 再次匹配相同的内容,但不是“第一个值”,而是明确禁止第一行使用的值
      • 与 Andrej 的答案相比,由于 ((?!\1)[^,]+)((?!\1).{ 4})
    3. ^\[\d+\]\s+{((?!\2)[^,]+)[^[]+$
      • 同样,但明确禁止第二行使用该值

关于regex - 在连续行中查找 3 个不同数字的正则表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73576101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com