【问题标题】:Regex to match chars at the start and digits at the end正则表达式匹配开头的字符和结尾的数字
【发布时间】:2017-12-04 06:54:13
【问题描述】:

以下条件我需要一个正则表达式:

  • 字符串的长度正好是8
  • 字符串不能以 PAK 开头
  • 第一个字符必须是大写字符 [A-Z]
  • 第二个到第四个字符可以是大写字符
  • 剩余的字符只能是数字

例子:

  • PAK12345 -> 不允许
  • T1234567 -> 允许
  • ABCD1234 -> 允许
  • ABC12345 -> 允许
  • AB12345A -> 不允许
  • ABCDE123 -> 不允许
  • ABC123 -> 不允许

其实我有以下正则表达式:

(?!PAK)([A-Z]{1,4}[A-Z0-9]{7})$

这个正则表达式的问题是,“ABCDE123”是一个匹配项。

我怎么能说前 1 到 4 个字符只是大写字符,其余(直到总长度为 8)是数字?

【问题讨论】:

  • 你的意思是 1 到 5 是大写的?
  • 1 到 4 可以是大写。 1 必须为大写

标签: c# regex


【解决方案1】:

删除正则表达式范围运算符并进行精确的字符长度匹配。首先添加一个正向前瞻,以确保长度必须恰好为 8。

^(?=.{8}$)(?!PAK)([A-Z]{1,4}[0-9]+)$

DEMO

【讨论】:

  • 那么“ABC12345”不再允许
  • 几乎正确。必须将 {1,5} 更改为 {1,4}。非常感谢
  • 如果我在上面进行了更改,那么ABCDE123 将如何匹配?
  • ABCDE123 不应匹配。没关系
  • 哦,理解错了。我以为你希望这个 ABCDE123 字符串得到匹配。
猜你喜欢
  • 2016-12-07
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 2013-09-02
  • 2022-08-03
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多