【问题标题】:Regex representation for licence plate车牌的正则表达式表示
【发布时间】:2013-10-23 16:20:26
【问题描述】:

图案举例:

L(IP)-P(F)-2(014)

更多示例:

B-G-2
BI-GH-1245
HH-X-124

括号中的字符是可选的。第一部分(最多 3 个字符,最少 1 个)和第二部分(最多 2 个字符,最少 1 个)仅包含字母。第三部分(最多 4. 分钟 1)仅包含数字。各部分用“-”分隔。

你知道这个正则表达式的样子吗?

【问题讨论】:

  • 会是那些确切的字母和数字吗?例如,第一个字母总是 L,还是只是任何大写字母的占位符?
  • 不这样只是一个例子。可以是任意字母,任意数字
  • 只是检查。那么一些合法的例子是 L-P-2、LAB-PD-2 和 LA-PD-201?还是 L 和 P 也在括号变量之外?
  • 3 年会员和大约 10K 代表,你仍然不知道你应该尝试什么?
  • @HamZa 见鬼,我知道 ;)

标签: regex


【解决方案1】:

您可以使用字符类[A-Z] 匹配任何大写字符,使用\d 匹配任何数字。您可以使用{m,n} 指定重复,这意味着“在mn 次之间匹配上一个元素”:

它可能看起来像这样:

[A-Z]{1,3}-[A-Z]{1,2}-[0-9]{1,4}

您可能还想添加字符串锚点的开头和结尾(分别为^$):

^[A-Z]{1,3}-[A-Z]{1,2}-[0-9]{1,4}$

这取决于您是尝试从较大的字符串中提取车牌还是尝试查看特定字符串是否是车牌(而不是其他)。

如果您还需要匹配小写字符,请将每个 [A-Z] 类更改为 [A-Za-z]

【讨论】:

  • 括号中的可选文本怎么样?
  • 括号不存在,这就是 OP 选择表示可选字符的方式。目标是匹配 1-3 个字母、一个破折号、1-2 个字母、一个破折号,然后是 1-4 个数字。最近对这个问题的编辑有几个例子支持我的解释。
  • @F.J 谢谢,我在 java 中使用它,它给了我一个错误“无效的转义序列”developer.android.com/reference/java/util/regex/Pattern.html
  • \d 更改为\\d[0-9]\d 是正则表达式的外观,但实际上将 \d 放入 Java 字符串中,它看起来像 "\\d",因为需要转义反斜杠。
  • 刚刚将答案更改为使用 [0-9],因为根据您链接的文档,\d 将匹配任何 Unicode 数字,包括来自其他语言的数字。在大多数其他语言中,\d 等同于 [0-9],除非明确启用了 Unicode 选项。
【解决方案2】:

你可以使用这个正则表达式:

^[A-Za-z]{1,3}-[A-Za-z]{1,2}-[0-9]{1,4}$

【讨论】:

  • 为什么会有有趣的反向引用?
  • 你在哪里看到反向引用?
  • (?:XXX)(XXX) 的非捕获版本。
  • 为什么允许使用括号?我认为这只是 OP 表明一部分是可选的方式。
  • @Barmar:OP 的第一个示例有括号,并且在这一行的顶部:The chars in brackets are optional. 可能让我感到困惑
【解决方案3】:

如果我对你的解释正确,你基本上需要

或[A-Za-z]{1,3}-[A-Za-z]{1,2}-[0-9]{1,4}

【讨论】:

  • 我尝试使用 python findall 方法,但找不到。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多