Python regex条件式,不匹配 if

问题描述 投票:0回答:2

对不起,我的标题有点无用,我真的很难解释这个问题。

我有一个独特的标识符列表,这些标识符可以以多种不同的方式出现,我试图使用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. 我需要将这个标识符作为异常提出,而不是作为匹配。

有什么想法吗?如果有必要,我很乐意提供更多的说明。谢谢

来自Regex101在线测试器

python regex regex-group
2个回答
0
投票

您可以排除与以下连字符和数字相匹配的情况。(?!-\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$)? 可选捕获 第二组

Regex演示


0
投票

试试这个正则表达式

^([a-zA-Z]{2}[\d]{4})(?!-\d)(L\d|Transit|T|-[A-Z]{3})?$

我已经添加了 (?!...) Negative Lookahead 以免与 -02.

(?!...)负向看齐。从表达式的当前位置开始,确保给定的模式不会匹配。不消耗字符。

您可以在以下网站查看演示 这个 联网。

© www.soinside.com 2019 - 2024. All rights reserved.