我需要在2000到3000之间搜索所有4位数的数字。
字母可以在之前和之后。
我以为我可以使用[2000-3000]{4}
但不起作用,为什么?
答案 0 :(得分:25)
怎么样
^2\d{3}|3000$
或者作为Amarghosh& Bart K.& jleedev指出,要匹配多个实例
\b(?:2[0-9]{3}|3000)\b
如果您需要匹配a3000
或3000a
而不是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)
(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'。关于正则表达式有一些很好的教程:
答案 5 :(得分:0)
为什么不检查大于或小于?它比正则表达式更简单
num >= 2000 and num <=3000