对不起,我的标题有点无用,我真的很难解释这个问题。
我有一个独特的标识符列表,这些标识符可以以多种不同的方式出现,我试图使用regex对它们进行规范化处理,这样我就可以在几个数据库之间进行比较。下面是它们的一些例子。
AB1201
AB-1201
AB1201-T
AB-12-01L1
AB1201-TER
AB1201 Transit
我写了一行代码 把所有的连字符和空格拉出来 然后用这个regex:
([a-zA-Z]{2}[\d]{4})(L\d|Transit|T$)?
这和预期的一样,返回了一个这样的列表。
AB1201
AB1201
AB1201T
AB1201L1
AB1201
AB1201T
问题是,我有一个标识符,看起来像这样: AB1201-02
. 我需要将这个标识符作为异常提出,而不是作为匹配。
有什么想法吗?如果有必要,我很乐意提供更多的说明。谢谢
您可以排除与以下连字符和数字相匹配的情况。(?!-\d)
使用一个负的看头。
如果它应该从字符串的开头开始,您可以使用锚点 ^
注意,你可以写 [\d]
作为 \d
^([a-zA-Z]{2}\d{4})(?!-\d)(L\d|Transit|T$)?
该模式将看起来像
^
字符串的开始(
捕捉 第1组[a-zA-Z]{2}\d{4}
匹配2次a-zA-Z和4个数字。)
紧密型集团(?!-\d)
消极看重,断言正对的东西不是 -
和一位数(L\d|Transit|T$)?
可选捕获 第二组试试这个正则表达式
^([a-zA-Z]{2}[\d]{4})(?!-\d)(L\d|Transit|T|-[A-Z]{3})?$
我已经添加了 (?!...) Negative Lookahead
以免与 -02
.
(?!...)负向看齐。从表达式的当前位置开始,确保给定的模式不会匹配。不消耗字符。
您可以在以下网站查看演示 这个 联网。