正则表达式 - 查找2000到3000之间的数字

Jac*_*ack 9 regex

我需要在2000到3000之间搜索所有4位数的数字.

它可以是字母之前和之后.

我以为我可以使用[2000-3000]{4},但不起作用,为什么?

谢谢.

YOU*_*YOU 25

怎么样

^2\d{3}|3000$
Run Code Online (Sandbox Code Playgroud)

或者正如Amarghosh&Bart K.&jleedev指出的那样,要匹配多个实例

\b(?:2[0-9]{3}|3000)\b
Run Code Online (Sandbox Code Playgroud)

如果你需要匹配a30003000a不匹配13000,你需要前瞻和看起来像

(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])
Run Code Online (Sandbox Code Playgroud)

  • 那匹配'13000`(或'a3000`).它会计算`^ 2\d {3}`或`3000 $`:你需要添加一些括号. (2认同)

pax*_*blo 9

正则表达式很少适用于检查范围,因为对于27到9076之间的范围,它们变得非常难看.它可以完成,但你真的更好的只是做一个正则表达式检查数字,如:

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

这应该适用于几乎每个正则表达式引擎,然后手动检查范围.

在toto中:

def isBetween2kAnd3k(s):
    if not s.match ("^[0-9]+$"):
        return false
    i = s.toInt()
    if i < 2000 or i > 3000:
        return false
    return true
Run Code Online (Sandbox Code Playgroud)

什么特别的正则表达式[2000-3000]{4}是检查是下列任何字符的准确四次出现:2,0,0,0-3,0,0,0-换句话说,正是从绘制四个数字0-3.

使用之前的字母,您需要修改正则表达式并检查正确的子字符串,如:

def isBetween2kAnd3kWithLetters(s):
    if not s.match ("^[A-Za-z]*[0-9]{4}[A-Za-z]*$"):
        return false
    idx = s.locate ("[0-9]")
    i = s.substring(idx,4).toInt()
    if i < 2000 or i > 3000:
        return false
    return true
Run Code Online (Sandbox Code Playgroud)

另外,检查27到9076范围内的正则表达式就像这个可怕的怪物:

^2[7-9]|[3-9][9-9]|[1-9][0-9]{2}|[1-8][0-9]{3}|90[0-6][0-9]|907[0-6]$
Run Code Online (Sandbox Code Playgroud)

我认为这比使用^[1-9][0-9]+$然后通过if语句检查它是否介于27和9076之间的可读性差得多?