因此,我一直在尝试为诸如电阻值之类的东西写一个正则表达式,它包含一定数量的数字和至多一个字母,但始终总有一定数量的字符(让我们以四个为例) -字符电阻代码)。

首先,我可以做'\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/

    10-11 17:37