gpt4 book ai didi

java - 使用正则表达式在节内的组件内搜索数字

转载 作者:行者123 更新时间:2023-12-02 01:55:57 25 4
gpt4 key购买 nike

给定以下字符串:

G1:NMXPAKW63roBnMZ[RQ:1,2]-G2:Q9M7mPl9X4NG9Ry[QC:1,5]-G3:1Bd57mPl9X4NG9Ry[QC:1,5]

我有以下正则表达式(其基础来自上一个问题):

 G2:(?:(?!-G)\S)*([^0-9]|^)1([^0-9]|$)

我想要实现的是“获取从 G2 开始并在下一部分之前结束的部分”,在本例中为 -G3,然后“向后搜索第一个数字”。

这有效,但是我想在遇到 QC: 部分时停止搜索,目前如果我将正则表达式中的 1 替换为 9,它会与哈希组件 (Q9M7mPl9X4NG9Ry) 中的 9 匹配,但我不这样做想。在 G2 部分中,我只想在 QC:1,5 组件中查找匹配项。

最佳答案

以下正则表达式即可:(?:^|-)G2:(?:(?!-G).)*QC:(?:(?!-G).)*(?<!\d)(\d+)

其工作原理如下:

  • 找到 G2 部分:(?:^|-)G2:
    这可以是第一部分(输入以 G2 开头),也可以是次要部分(匹配 -G2 )。

  • 跳过随机文本,但停在下一部分:(?:(?!-G).)*
    这基本上是一个 .* ,但如果 . 则使用负前瞻来停止将匹配 --G .

  • 找到QC:QC:

  • 跳过随机文本,但停在下一部分:(?:(?!-G).)*

  • 匹配一个整数并捕获它:(?<!\d)(\d+)

第二个“跳过文本”将定位该部分的末尾,然后从那里回溯,直到找到数字。

由于我们要回溯,所以我们需要负向后看 (?<!\d)以确保回溯不会在数字中间停止。

参见demo on regex101.com .

关于java - 使用正则表达式在节内的组件内搜索数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285283/

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