我需要在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)
如果你需要匹配a3000或3000a不匹配13000,你需要前瞻和看起来像
(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])
Run Code Online (Sandbox Code Playgroud)
正则表达式很少适用于检查范围,因为对于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之间的可读性差得多?