Regex 正则表达式使用正向前瞻,而不是直接在

Regex 正则表达式使用正向前瞻,而不是直接在,regex,Regex,我有产品代码,例如HX3923,它总是以2个大写字母开头,以4个数字结尾。有些产品有“金色”的颜色,这是文本中的某个地方 例如: HX3923,宽:0.3,高:0.7,金色,HX3924,color=“蓝色”,宽=0.3 我需要匹配HX3923,但不能匹配HX3924,因为后者没有金色 这会选择两个产品代码 [A-Z][A-Z]\d\d\d\d 我想我需要添加一些类似的内容 [?=gold) 但这会直接关注产品代码。在下一个产品代码“开始”之前,我如何确保它看起来是否有黄金 目前有以下丑陋的

我有产品代码,例如HX3923,它总是以2个大写字母开头,以4个数字结尾。有些产品有“金色”的颜色,这是文本中的某个地方

例如:

HX3923,宽:0.3,高:0.7,金色,HX3924,color=“蓝色”,宽=0.3

我需要匹配HX3923,但不能匹配HX3924,因为后者没有金色

这会选择两个产品代码

[A-Z][A-Z]\d\d\d\d
我想我需要添加一些类似的内容

[?=gold)
但这会直接关注产品代码。在下一个产品代码“开始”之前,我如何确保它看起来是否有黄金

目前有以下丑陋的解决方案:

[A-Z][A-Z]\d\d\d\d(?=.{0,100}gold)

您当前的方法
(?=.{0100}gold)
在0-100个字符后使用正向前瞻断言
gold

相反,一种选择是使用捕获组
()
,单词边界
\b
,以及在遇到另一种
[a-Z][a-Z]\d{4}
模式之前匹配黄金的方法

\b([A-Z][A-Z]\d{4})\b(?:(?![A-Z][A-Z]\d{4}).)*\bgold\b
部分地

  • \b([A-Z][A-Z]\d{4})\b
    在捕获组1中匹配2个大写字符和4个数字
  • (?:
    非捕获组
    • (?!
      负前瞻,断言右边的不是
      • [A-Z][A-Z]\d{4}
        匹配2个大写字符和4个数字
    • )。
      关闭前瞻并匹配除换行符以外的任何字符
  • )*
    关闭非捕获组并重复0多次
  • \bgold\b
    在单词边界之间匹配
    gold


值在组1中。

您当前的方法
(?=.{0100}gold)
在0-100个字符后使用正向前瞻断言
gold

相反,一种选择是使用捕获组
()
,单词边界
\b
,以及在遇到另一种
[a-Z][a-Z]\d{4}
模式之前匹配黄金的方法

\b([A-Z][A-Z]\d{4})\b(?:(?![A-Z][A-Z]\d{4}).)*\bgold\b
部分地

  • \b([A-Z][A-Z]\d{4})\b
    在捕获组1中匹配2个大写字符和4个数字
  • (?:
    非捕获组
    • (?!
      负前瞻,断言右边的不是
      • [A-Z][A-Z]\d{4}
        匹配2个大写字符和4个数字
    • )。
      关闭前瞻并匹配除换行符以外的任何字符
  • )*
    关闭非捕获组并重复0多次
  • \bgold\b
    在单词边界之间匹配
    gold

数值在第1组中