写正则表达式的更好方法

时间:2013-07-17 13:18:34

标签: regex

所以,我一直试图写出一个正则表达式,比如一个电阻值,它包含一定数量的数字,最多只有一个字母,但总是一定数量的字符总数(让我们用这个例子一个四字符的电阻代码)。

首先,我可以'\d*[RKM]\d*',但这样可以'R'

此外,我可以执行类似'[\dRKM]{4}'的操作,但这样可以使'RRR4'之类的内容不是我想要的值。

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

基本上,是否有更简洁的方式来编写'[RKM]\d\d\d | \d[RKM]\d\d | \d\d[RKM]\d | \d\d\d[RKM] | \d\d\d\d'

1 个答案:

答案 0 :(得分:9)

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

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

或者:

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

另请参阅:Regular Expressions: Is there an AND operator?