8

所以,我一直在尝试为电阻值之类的东西写出一个正则表达式,它包含一定数量的数字和最多一个字母,但总是有一定数量的字符总数(让我们使用四个-字符电阻代码)。

首先我可以这样做'\d*[RKM]\d*',但这将允许类似'R'.

另外,我可以做类似的事情'[\dRKM]{4}',但这将允许类似的事情'RRR4'不是我想要的值。

'\d{1,4}[Rr]\d{0,3} | ([RKM]\d{3}) | (\d{4})',虽然更具体,但仍然允许'1234R567'which is not 四个字符。

所以基本上,有没有更紧凑的写作方式'[RKM]\d\d\d | \d[RKM]\d\d | \d\d[RKM]\d | \d\d\d[RKM] | \d\d\d\d'

4

1 回答 1

9

根据您的正则表达式风格,您可以使用前瞻:

^(?!(?:\d*\D){2})[\dRKM]{4}$
  • (?!(?:\d*\D)- 断言没有两个非数字字符。

或者:

^(?=.{4}$)\d*(?:[RKM]\d*)?$
  • (?=.{4}$)- 断言字符串的长度为 4。

另请参阅:正则表达式:是否有 AND 运算符?

于 2013-07-17T13:37:19.413 回答