regex - 编写正则表达式的更好方法

标签 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' ?

最佳答案

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

^(?!(?:\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/

    相关文章:

    JavaScript 正则表达式帮助

    java - 字符串正则表达式之间的字符串

    php - 匹配必须为 12 个字符长且大写的字符串的前三个字母的正则表达式

    regex - gradle war重命名文件常规exp不起作用

    ruby - 如果第一个字符是 Ruby 中的大写字母,如何删除前 3 个字符

    regex - 正则表达式仅在字符串以目标结尾时匹配

    ruby - 具有可选查询参数的 Sinatra

    r - 如何使用 grep 提取日期?我需要为每一个匹配 ", "、 "/"、 ". "、 "- "

    python - 在 Python 中使用正则表达式提取精确的单词或字符集

    python - 正则表达式解析 python 中的导入语句