我有以下正则表达式:
^\d{1,5}.*[^0-9][0-9]{5}$
以及以下文字: 123 King Drive 12 OH 12345
我希望匹配以1到5位数字开头的字符串,并以5位数字结尾,并且它们之间没有其他数字。但我总是将整个文本作为匹配,但它应该跳过,因为 12 介于 123 和 12345 之间。
为什么会这样?不应该[^0-9]
做这个伎俩吗?
答案 0 :(得分:4)
根据您对要求的描述,您似乎想要这样:
^\d{1,5}[^0-9]*[0-9]{5}$
.*
部分匹配任何内容,因此不排除数字。
答案 1 :(得分:2)
问题是.*
匹配任何,
^\d{1,5}[^0-9]+[0-9]{5}$
或更紧凑
^\d{1,5}\D+\d{5}$
\D
匹配任何非数字。如果要允许字符串在开始和结束数字之间没有任何内容,则可以使用\D*
。
答案 2 :(得分:2)
你需要:
^\d{1,5}\D*\d{5}$
读为" 1-5位数字,后跟任意数量的非数字字符,后跟5位数字。"如果您想要至少1个非数字字符,请使用\D+
。
您之前的正则表达式会匹配,因为' King Drive 12 OH'
匹配.*
而' '
会匹配单个字符[^0-9]
。
答案 3 :(得分:2)
在你的正则表达式中:
^\d{1,5}.*[^0-9][0-9]{5}$
示例文字:
123 King Drive 12 OH 12345
-
^ \ d {1,5}匹配“123”
。*匹配“King Drive 12 OH”
[^ 0-9]匹配“”
[0-9] {5} $匹配“12345”
正如其他人也建议的那样,这样的事情可以避免这个问题,因为你明确地说(不像使用“。*”)不匹配字符串中间的任何非数字:
^\d{1,5}\D+\d{5}$