给出以下字符串:
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时停止搜索:部分,当前,如果我用9替换正则表达式中的1,它将与哈希组件(Q9M7mPl9X4NG9Ry)中的9匹配,我不这样做想。在G2部分中,我只想在QC:1,5组件中查找匹配项。
答案 0 :(得分:1)
正则表达式-G2:.*?\[(.*?)\]
将为您提供QC:1,5
部分
答案 1 :(得分:1)
以下正则表达式将起作用:(?:^|-)G2:(?:(?!-G).)*QC:(?:(?!-G).)*(?<!\d)(\d+)
它的工作原理如下:
找到G2部分:(?:^|-)G2:
这可以是第一部分(输入以G2
开头),也可以是第二部分(匹配-G2
)。
跳过随机文本,但在下一部分停止:(?:(?!-G).)*
这基本上是.*
,但如果.
与-
中的-G
相匹配,则负向前进将停止。
找到QC:QC:
跳过随机文本,但在下一节停止:(?:(?!-G).)*
匹配一个整数并捕获它:(?<!\d)(\d+)
第二个“跳过文本”将定位到该节的末尾,然后从该处回溯直到找到一个数字。
由于我们正在回溯,所以我们需要在(?<!\d)
之后使用负向后看,以确保回溯不会在数字中间停止。