【问题标题】:Regex pattern not matching input string正则表达式模式与输入字符串不匹配
【发布时间】:2014-01-27 16:29:21
【问题描述】:

我需要找到一种限制数据输入的模式。我需要它来限制输入:

第一个字符必须是“S” 第二个字符必须是“S”、“T”、“W”、“X”或“V” 接下来的 6 必须是 0 - 9 的数字 最后 2 可以是任何大写字母或任何数字 0 - 9

所以我的研究使我把它放在一起.....

^[S][STWXV]/d{6}[A-Z0-9]{2}$

根据我的阅读:

[S] 仅表示大写字母 S [STWXV] 表示此列表中的任何一个字母 /d{6} 表示 6 位数字 [A-Z0-9]{2} 表示任意 2 个字符 A - Z 或 0 - 9

我不是在字符串中的任何地方寻找匹配,我需要整个字符串来匹配这个模式。

那么为什么Regex.IsMatch("SX25536101", "^[S][STWXV]/d{6}[A-Z0-9]{2}$") 返回false?

我显然在某个地方出错了,但这是我第一次尝试正则表达式,这没有任何意义:(

【问题讨论】:

  • 尝试找到一个能更好地描述您的问题的标题。考虑到这个标题将用于搜索引擎。
  • 如此接近:尝试 \d 而不是 /d
  • 反斜杠转义有趣的字符,如 \d。在许多语言中,正斜杠写在正则表达式的两侧,表示表达式是正则表达式。
  • @TimSchmelter 是的,你是对的,对不起,我会改变它,但不确定它是否会帮助其他人。对此很陌生,但希望随着时间的推移会提高我的贡献的质量。谢谢大家。

标签: c# regex


【解决方案1】:

您需要使用\d 表示数字:

 Regex.IsMatch("SX25536101", @"^[S][STWXV]\d{6}[A-Z0-9]{2}$"); // true

注意:这里是很好的Regular Expressions Cheat Sheet,将来可以帮助您。

【讨论】:

  • 离这么近却没有发现这么愚蠢的错误真是太烦人了!谢谢。
【解决方案2】:

或者根本不使用\d(首选且更快):

^S[STWXV][0-9]{6}[A-Z0-9]{2}$

请参阅 herehere 了解原因。

【讨论】:

  • 为什么首选? -1
  • \d 是数字的简写,它使正则表达式更加简洁。使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2015-11-14
  • 2015-06-29
相关资源
最近更新 更多