正则表达式中的可选字符

Mar*_*tin 6 regex optional

任务非常简单,但我还没有找到一个好的解决方案:一个字符串可以包含数字,短划线和加号,或者只包含数字.

^[0-9+-]+$
Run Code Online (Sandbox Code Playgroud)

除了当用户输入像"+ - + - +"这样的垃圾时,我需要做的大部分工作

我没有幸运的常规前瞻,因为破折号和优势可能在字符串中的任何位置.

有效字符串:

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

无效:

  1. ++ - +

Ric*_*dle 15

这个怎么样:

([+-]?\d[+-]?)+
Run Code Online (Sandbox Code Playgroud)

这意味着"一个或多个数字,每个数字可以在可选的加号或减号之前或之后".

这是一个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
Run Code Online (Sandbox Code Playgroud)

打印这个:

234654 : True
24-3+-2 : True
-234 : True
25485+ : True
++--+ : False
Run Code Online (Sandbox Code Playgroud)


Mic*_*ers 8

怎么样:

^[0-9+-]*[0-9][0-9+-]*$
Run Code Online (Sandbox Code Playgroud)

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

  • 好吧,这个问题没有提到有关有效数学表达式的任何内容. (2认同)