正则表达式 - 仅匹配7个字符?

时间:2010-03-15 15:30:56

标签: .net regex

我正在尝试匹配一个SEDOL(正好是7个字符:6个字母数字字符后跟1个数字字符)

我的正则表达式

([A-Z0-9]{6})[0-9]{1}

匹配正确,但是以有效匹配开头的大于7个字符的字符串也匹配(如果你看到我的意思:))。例如:

  

B3KMJP4

匹配正确,但也是如此:

  

B3KMJP4x

哪个不匹配。

有谁能告诉我如何避免这种情况?

4 个答案:

答案 0 :(得分:6)

正则表达式末尾的美元符号(称为锚点)表示字符串结束:

^([A-Z0-9]{6})\d$

我还在开头添加了“^”,表示字符串的开始并阻止匹配xB3KMJP4 我还简化了原始正则表达式。

顺便说一句,根据维基百科,对于第一个字符,不使用元音。我不太确定这是规则还是惯例。

答案 1 :(得分:5)

您需要同时使用startend anchors

^([A-Z 0-9]{6})[0-9]{1}$

这将匹配一个字符串,其中 6个字母数字+空格字符后跟一个数字 。如果将此类字符串设置为较大字符串的 后缀 前缀 ,则不匹配。

此外,您可以摆脱{1}因为[0-9]本身匹配一个数字。

此外\d代表一位数字。因此,您可以按如下方式缩短正则表达式:

^([A-Z \d]{6})\d$

答案 2 :(得分:3)

 ^([A-Z\d]{6})\d$
  • 使用^作为字符串的开头
  • $ for string of end
  • 删除额外的空间,只注意到一个
  • 用\ d
  • 交换0-9
  • 删除{1},因为这是多余的

答案 3 :(得分:3)

您忘记了正则表达式匹配字符串中的任何位置。要修复它,试试这个。

^([A-Z 0-9]{6})[0-9]{1}$

^表示匹配字符串的开头,$表示匹配字符串的结尾。