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

时间:2010-01-28 12:17:24

标签: regex

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

字母可以在之前和之后。

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

谢谢。

6 个答案:

答案 0 :(得分:25)

怎么样

^2\d{3}|3000$

或者作为Amarghosh& Bart K.& jleedev指出,要匹配多个实例

\b(?:2[0-9]{3}|3000)\b

如果您需要匹配a30003000a而不是13000,则需要前瞻,并且看起来像

(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])

答案 1 :(得分:9)

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

^[0-9]+$

应该只对每个正则表达式引擎起作用,然后手动检查范围。

总结:

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

你的特定正则表达式[2000-3000]{4}正在检查的是以下任意一个字符的四次出现:2,0,0,0-3,0,0,0 - 换句话说,恰好是从{{ 1}}。

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

0-3

顺便说一下,检查27到9076范围内的正则表达式就像这个可怕的怪物:

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

我认为这比使用^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]$ 的可读性低得多,然后使用^[1-9][0-9]+$语句检查它是否介于27和9076之间?

答案 2 :(得分:3)

嗯狡猾的一个。短划线 - 仅适用于紧接在之前和之后的字符,因此正则表达式实际匹配的正好是0到3之间的4个字符(即0,1,2和3)。例如,3210,1230,3333等...尝试下面的表达式。

(2[0-9]{3})|(3000)

答案 3 :(得分:2)

以下是解释原因和检测范围的方法:http://www.regular-expressions.info/numericranges.html

答案 4 :(得分:2)

正确的正则表达式将是\b(2\d{3}|3000)\b。这意味着:匹配字符'2'然后恰好三位数(这将匹配2000至2999之间的任何数字)或匹配'3000'。关于正则表达式有一些很好的教程:

  1. http://gnosis.cx/publish/programming/regular_expressions.html
  2. http://immike.net/blog/2007/04/06/the-absolute-bare-minimum-every-programmer-should-know-about-regular-expressions/
  3. http://www.regular-expressions.info/

答案 5 :(得分:0)

为什么不检查大于或小于?它比正则表达式更简单

num >= 2000 and num <=3000