我正在尝试创建一个与上面列出的3种模式匹配的RegEx。我可以为这些中的任何一个创建一个有效的RegEx,但我的问题是创建一个适用于所有这四个的。允许的值低于,其中D是任何数字和'。'永远不会作为尾随字符出现(即DDD。无效)。 V和E也指那些特定的字符。
其他所有内容都应无效,例如:
我对RegEx不太满意,但我可以用以V开头的条目描述这种模式的一部分,如下所示:
V[0-9]{2,2}(\.[0-9]{1,2})?
我可以为entires的全数字部分和条目的E前缀部分编写非常相似的语句。问题是如何将所有3组合成一个RegEx,它不会使我的头部旋转阅读。什么是一个很好的RegEx匹配所有3种模式?
编辑:我忘了包含格式Vdd.dd
答案 0 :(得分:1)
(E\d|(V|\d))\d{2,2}(\.\d)?(?(2)\d?|)
E有一个数字,或V,或一个数字,后跟两位数字,然后是通常的小数位。
E必须有三个非十进制数字,V必须有2个,而自己的数字必须有三个。
如果V或单个数字在开头匹配(I.E.不是'E'),则后方允许额外的数字。
答案 1 :(得分:1)
(\d{3}(\.\d{1,2})?)|(V\d{2}(\.\d{1,2})?)|(E\d{3}(\.\d)?)
编辑:一些解释:我刚刚匹配了所有3种不同的格式:
\d{3}(\.\d{1,2})?
表示三个数字后跟一个匹配1或2位的句点。
V\d{2}(\.\d{1,2})?
表示V后面跟两个数字,可选周期和一个或两个数字
E\d{3}(\.\d)?
表示三位数后跟一个带有单个数字的可选句点
然后我只用()包围每一个并将它们全部与|组合(或)。
答案 2 :(得分:1)
有三种不同的正则表达式没有错,是吗?
\d{3}(.\d{1,2)?
V\d{2}(.\d)?
E\d{3}(.\d)?
这将来可能会更加可维护。
答案 3 :(得分:1)
如果Eddd无效,那就更容易了:
[EV\d]\d{2}(\.\d{0,2})?
同样,如果Vddd有效:
[EV\d]\d{2,3}(\.\d{0,2})?
完全匹配你所拥有的东西有点困难:
(\d{3}(\.\d{1,2})?)|(V\d{2}(\.\d)?)|(E\d{3}(\.\d)?)
确保您测试完全匹配,否则
V123.1
将匹配为
V12