所以,我一直在尝试为电阻值之类的东西写出一个正则表达式,它包含一定数量的数字和最多一个字母,但总是一定数量的字符总数(让我们使用四个-字符抵抗代码)。
首先我可以做 '\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'
?
最佳答案
根据您的正则表达式风格,您可以使用前瞻:
^(?!(?:\d*\D){2})[\dRKM]{4}$
(?!(?:\d*\D)
- 断言没有两个非数字字符。 或者:
^(?=.{4}$)\d*(?:[RKM]\d*)?$
(?=.{4}$)
- 断言字符串的长度为 4。另见:Regular Expressions: Is there an AND operator?
关于regex - 编写正则表达式的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700878/