繁体   English   中英

正则表达式匹配十进制值范围

[英]Regular expression to match a decimal value range

是否有一种简单的方法来获取动态十进制值并创建可以处理此问题的验证正则表达式?

例如,我知道/1[0-9]{1}[0-9]{1}/应该匹配100-199中的任何内容,因此,给定任何十进制数字,以编程方式创建相似结构的最佳方法是什么? ?

我当时以为我可以遍历每个数字并从那里建立一个数字,但是我不知道该怎么做。

使用正则表达式很难正确处理范围。 RE是用于基于文本的分析或模式匹配而不是语义分析的工具。 您可能可以安全地做的最好的事情就是识别一个字符串,该字符串是具有一定位数的数字。 您可以使用以10为底的对数为范围内的最大或最小位数建立RE。 例如,比赛AB之间的一个数,其中b> 一个 ,通过构建RE:

re = "[1-9][0-9]{"
re += str(log10(a)-1)
re += "-"
re += str(log10(b)-1)
re += "}"

注意 :该示例没有特定的编程语言。 抱歉,这里没有真正讲C#。

有一些边界点问题,但是基本思想是为100和999之间的任何值构造一个像[1-9][0-9]{1}类的RE,然后如果字符串与表达式匹配,则将其转换为整数并在值空间而不是词法空间中进行范围分析。

话虽如此...我将采用Mehrdad的解决方案,并使用decimal.TryParse等语言提供的decimal.TryParse ,然后对结果进行范围检查。

^ [ - ]?\\ d +(\\ d +)$

将验证带有可选小数点和/或减号的数字

不,是简单的答案。 生成将正常运行的正则表达式比执行以下操作要复杂得多:

  1. 十进制正则表达式(在字符串中查找十进制数字)。 "^\\$?[+-]?[\\d,]*(\\.\\d*)?$"
  2. 将结果转换为十进制并与您的范围进行比较。 decimal.TryParse

这取决于您要解析的位置和内容。

使用下面的RegEx解析字符串以获取数字。 可以处理逗号和点。

[^\\d.,](?<number>(\\d{1,3}(\\.\\d{3})*,\\d+|\\d{1,3}(,\\d{3})*\\.\\d+|\\d*[,\\.]\\d+|\\d+))[^\\d.,]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM