【发布时间】:2020-12-21 02:32:27
【问题描述】:
TL\DR
考虑以下正则表达式:
(?<=^|\s|,)((?<=Continental|Conti)(?:\s|,)?Ts8|other)
我正在尝试使用上面的正则表达式来匹配下面字符串中的Ts8:
Conti Ts8 some other string
有人可以向我解释一下,为什么这个正则表达式匹配我输入的 other 字符串,而不是 Ts8 部分?
当我解释那个正则表达式时,我告诉我的脚本,从我的字符串中匹配这两件事:
- 字符串other前面有空格或逗号,或者
- 字符串 Ts8,前面有空格或逗号,前面有字符串 Conti 或 Continental 之一,然后前面有空格或逗号
我想要的是一个正则表达式,它将匹配所有这些输入:
- 继续 Ts8
- 欧陆 Ts8
- 我的其他字符串
- ContiTs8
- ContinentalTs8
但不会匹配
- 超级大陆 Ts8
- 超级大陆Ts8
长版
我正在尝试根据包含一堆模型的模型数组从字符串中匹配模型名称。我也知道这些型号的品牌。有些型号名称很短(字符很少),有些型号只包含数字。我想减少在这种情况下匹配误报的可能性,仅在它们与模型的品牌之前进行匹配。
我们以名为 MyBrand 的品牌为例。我知道这个品牌有两个型号,型号为12和型号为LatestSuperBestModel。由于 LatestSuperBestModel 似乎是一个相当独特的名称,我很容易通过字符串中的模型名称简单地匹配它。但是由于 12 只是一堆数字,如果我只匹配的话,我可能会得到大量的误报匹配。但是为了仍然能够匹配该型号,我想将品牌名称添加到匹配项中,因为与品牌名称一起,MyBrand 12 我更有可能确实匹配型号名称来自字符串,而不是任意数字。
【问题讨论】:
-
您与
other有一个交替,所以它匹配也就不足为奇了。只有一个断言(?<=^|\s|,)并且它被实现了。 -
为什么我之前的改动也不匹配?我的意思是,对于问题中的示例,我确实匹配了
other字符串,但Ts8部分不匹配。如果我删除更改,Ts8部分仍然不匹配,这意味着我根本没有匹配到字符串。
标签: regex