正则表达式匹配一系列数字小数(1 - 155)

时间:2017-01-09 19:14:22

标签: regex numbers

希望在完全停止后将£1£155的所有总和与一组可选的便士数字相匹配,以便£59.65匹配,£0.47和{{1不匹配。

这是我到目前为止所做的:

£155.56

1到155之间的自然数和小数

2 个答案:

答案 0 :(得分:2)

如果你的正则表达式支持前瞻,你可以试试这个:

£(?:1(?:[0-4](?:[0-9]?(?:[.,][0-9]{1,2})?)?|5(?:[0-4](?:[.,][0-9]{1,2})?|5(?:[.,]00?)?)|[6-9]?(?:[.,][0-9]{1,2})?)?|[2-9][0-9]?(?:[.,][0-9]{1,2})?)(?![.,]?[0-9])

demo

答案 1 :(得分:2)

怎么样:

£((\d|[1-9]\d|1[0-4]\d|15[0-4])(\.\d{2})?|155(\.00)?)

正则表达式的工作方式如下:它始终以前导井号(£)开头。接下来,它会考虑两种情况:值小于155的情况和155的情况。 155的情况很简单:155(\.00)?155可选地后跟一个点和两个零。

小于155的情况更复杂:我们分为几种情况:

  • 一位数\d(零到九);
  • 有两位数的那个,但没有前导零:[1-9]\d;
  • 三位数的那个:但由于结果应该小于155,我们再次必须分支:
    • 小于150的内容:这些内容以1开头,后跟04(含)之间的数字,后跟任意数字\d ,所以1[0-4]\d;
    • 大于或等于150但小于155的那些,都以15开头,后跟0到{4范围内的内容{1}}(含),15[0-4]

所有这些都可以选择一个点和两个数字(\.\d{2})。

此正则表达式拒绝带前导零的数字(如09.12),当然除非有一位数:0.85是允许的。

我假设小数点后总是有两位数(所以0.114.135不允许),如果允许任意数量,只需将\.\d{2}替换为{ {1}}(如果需要至少一位数字),或\.\d+即使没有数字也是允许的。