0

我正在尝试使用 c# 正则表达式来匹配特定的字符串,但我不知道该怎么做。任何帮助表示赞赏。

我要匹配的字符串如下,其中 A 是大写字母字符,X 是大写字母数字字符,# 是 0、1 或 2。

AA-#-XX-X-XXX-XXXXXXX-XXXXXXXX

因此,以下任何一项都将与上面的字符串匹配。

XY-1

MM-0-AB

MM-0-AB-1-ABC-1234567

VV-2-XX-7-CCC-ABCDEFG-12345678

以下任何一项都不匹配。

QQ-7-AA(第二级只允许 0、1、2。)

QQ-2-XX-7-CC(该级别的部分字符。)

QQ-2-XX-7-CCC-ABCDEFG-(不能以破折号结束。)

QQ-2-XX-7-CCC-ABCDEFG-123456(该级别的部分字符。)

到目前为止(实际上还没有那么远)我有匹配的模式@"^[A-Z]{2}",但我不确定如何有条件地匹配(我什至不确定是否有条件地是正确使用的术语)字符串的其余部分,但前提是它有没有。我需要为此写 7 个不同的语句吗?似乎不合理,但我可能是错的。

4

1 回答 1

9

看看正则表达式语言。您需要以下元素:

  • 大写字母字符:[A-Z]
  • 大写字母数字字符:[A-Z0-9]
  • 0、1 或 2:[0-2]
  • 短跑:-

  • 匹配x精确n次:x{n}

  • 匹配x零次或一次:x?
  • 定义一个子表达式:(...)

例子:

  • 两个大写字母字符:[A-Z]{2}
  • 两个大写字母字符,后跟一个破折号:[A-Z]{2}-
  • 两个大写字母字符,后跟一个破折号,然后是 0、1 或 2:[A-Z]{2}-[0-2]
  • 两个大写字母字符,后跟一个破折号,然后是 0、1 或 2,但子表达式由破折号和 0、1 或 2 组成,出现 0 次或 1 次:
    [A-Z]{2}(-[0-2])?
  • 等等...

结果表达式:

^[A-Z]{2}(-[0-2](-[A-Z0-9]{2}(-[A-Z0-9](-[A-Z0-9]{3}(-[A-Z0-9]{7}(-[A-Z0-9]{8})?)?)?)?)?)?$
于 2012-05-21T21:47:51.633 回答