Regex 正则表达式使用正向前瞻,而不是直接在
我有产品代码,例如HX3923,它总是以2个大写字母开头,以4个数字结尾。有些产品有“金色”的颜色,这是文本中的某个地方 例如: HX3923,宽:0.3,高:0.7,金色,HX3924,color=“蓝色”,宽=0.3 我需要匹配HX3923,但不能匹配HX3924,因为后者没有金色 这会选择两个产品代码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) 但这会直接关注产品代码。在下一个产品代码“开始”之前,我如何确保它看起来是否有黄金 目前有以下丑陋的
[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
部分地
在捕获组1中匹配2个大写字符和4个数字\b([A-Z][A-Z]\d{4})\b
非捕获组(?:
负前瞻,断言右边的不是(?!
匹配2个大写字符和4个数字[A-Z][A-Z]\d{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
部分地
在捕获组1中匹配2个大写字符和4个数字\b([A-Z][A-Z]\d{4})\b
非捕获组(?:
负前瞻,断言右边的不是(?!
匹配2个大写字符和4个数字[A-Z][A-Z]\d{4}
关闭前瞻并匹配除换行符以外的任何字符)。
关闭非捕获组并重复0多次)*
在单词边界之间匹配\bgold\b
gold