7

这个任务很简单,但我还没有想出一个好的解决方案:一个字符串可以包含数字、破折号和加号,或者只包含数字。

^[0-9+-]+$

完成我需要的大部分工作,除非用户输入像“+-+--+”这样的垃圾

我没有定期向前看的运气,因为破折号和加号可能位于字符串中的任何位置。

有效字符串:

  1. 234654
  2. 24-3+-2
  3. -234
  4. 25485+

无效的:

  1. ++--+
4

5 回答 5

16

这个怎么样:

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

这意味着“一个或多个数字,每个数字前面或后面都可以有一个可选的加号或减号”。

这是一个 Python 测试脚本:

import re
TESTS = "234654 24-3+-2 -234 25485+ ++--+".split()
for test in TESTS:
    print test, ":", re.match(r'([+-]?\d[+-]?)+', test) is not None

打印这个:

234654 : True
24-3+-2 : True
-234 : True
25485+ : True
++--+ : False
于 2009-05-19T17:22:40.387 回答
8

怎么样:

^[0-9+-]*[0-9][0-9+-]*$

这确保了字符串中的某处至少有一个数字。(看起来它可能有很多回溯。但另一方面,它没有包含在另一个 + 或 * 中的 + 或 *,我也不喜欢。)

于 2009-05-19T17:20:22.980 回答
2
^([+-]*[0-9]+[+-]*)+$

另一种解决方案在断言后面使用积极的看法,确保至少有一个数字。

^[0-9+-]+$(?<=[0-9][+-]*)

或者使用积极的前瞻性断言。

(?=[+-]*[0-9])^[0-9+-]+
于 2009-05-19T17:21:48.487 回答
0

我喜欢

^(?=.*\d)[\d+-]+$ 

解决方案,我自己。它准确地说明了您的需求,而无需任何麻烦。

于 2011-04-24T21:09:42.373 回答
0

我会这样做:

^[-+]*\d[\d+-]*$

快就是好!

于 2011-04-25T00:09:53.557 回答