2017-08-30 80 views
1

我想用正则表达式来验证这些值:算术正则表达式中

3.5 inch - 4.0 inch 
4.0 inch - 4.5 inch 
4.5 inch - 5.0 inch 
5.5 inch - 6.0 inch 
More than 6.0 inch 
Less than 3.5 inch 
Unknown 

上面我写的正则表达式这已经是:

(^3\.5\sinch\s-\s4\.0\sinch$)|(^4\.0\sinch\s-\s4\.5\sinch$)|(^4\.5\sinch\s-\s5\.0\sinch$)|(^5\.5\sinch\s-\s6\.0\sinch$)|(^More\sthan\s6\.0\sinch|Less\sthan\s3\.5\sinch$)|(^Unknown$) 

但我发现这是相当长。有什么方法可以缩短我的病情代码吗?

顺便说一句,这个值应该只匹配上面的条件。任何其他值比是错误的eg.4.5英寸 - 6.0英寸

+2

你能解释更准确地说什么是你的最终目标是什么?你使用哪种语言? – Mistalis

+0

你可以解释一下多一点.. –

+0

嗨,所以基本上我只是想缩短我的代码。如果你可以看到我的病情值之间有一些相似之处。如果我使用“或”表达,我的代码将匹配,如果我把“4.0英寸-6.0英寸”。我使用https://regex101.com来创建代码。 –

回答

0

有一个建议,让正则表达式短一点:

(^(?:(?:^[3-5].[05]\sinch\s-\s[4-6].[05])|(?:More\sthan\s6\.0|Less\sthan\s3.5))\sinch$)|(^Unknown$) 

说明通过sinch

  • (^ ... \sinch$)东西整理。
  • (?:(?:^[3-5].[05]\sinch\s-\s[4-6].[05])第一个不匹配的组检查范围[3.0,6.5]中的数字。
  • (?:More\sthan\s6\.0|Less\sthan\s3.5))\sinch$)第二次非匹配组检查大于6.0小于3.5
  • (^Unknown$)未知的情况。

Demo on regex101

+0

感谢您的帮助,但如果我把这个值:4.0英寸--6.0英寸,它也会被捕获,这是错误的。 –

+1

@AkbarArief如果间隔很精确,你肯定不能缩短你的正则表达式:你可以分解最后的*英寸*。 – Mistalis

+0

感谢您的帮助兄弟。对此,我真的非常感激 –