对不起,这个标题有点无益,我真的很难解释这个问题
我有一个可以以多种不同方式显示的唯一标识符列表,我正尝试使用正则表达式对它们进行规范化,以便可以跨多个数据库进行比较。以下是一些例子:
AB1201
AB-1201
AB1201-T
AB-12-01L1
AB1201-TER
AB1201 Transit
我已经写了一行代码,提取了所有的hypen和空格,并且使用了这个正则表达式:
([a-zA-Z]{2}[\d]{4})(L\d|Transit|T$)?
这与预期完全一样,返回如下所示的列表:
AB1201
AB1201
AB1201T
AB1201L1
AB1201
AB1201T
问题是,我有一个标识符如下:AB1201-02
。我需要将此作为例外情况提出,而不是作为匹配项包括在内
有什么想法吗?如有必要,我很乐意提供更多的澄清。谢谢
试试这个正则表达式
我添加了
(?!...) Negative Lookahead
以避免与-02
匹配您可以在this链接上查看演示
您可以使用负前瞻排除匹配以下连字符和数字
(?!-\d)
如果它应该从字符串的开头开始,那么可以使用锚点
^
注意,您可以将
[\d]
写为\d
这个图案看起来像
^
字符串的开头(
捕获第1组[a-zA-Z]{2}\d{4}
匹配2次a-zA-Z和4位数字)
闭合群(?!-\d)
负向前看,断言直接向右的不是-
和数字(L\d|Transit|T$)?
可选捕获组2Regex demo
相关问题 更多 >
编程相关推荐