我正在尝试从字符串中提取以数字4
开头的六个数字的邮政编码。我现在正在使用[4][0-9]{5}
,但它也是从其他数字开始匹配的,例如020-25468811
,它正在返回468811
。我不希望它在数字中间搜索,只搜索完整的数字。
答案 0 :(得分:2)
尝试使用以下内容:
(?<!\d)4\d{5}(?!\d)
即。找到以4开头的6位数字,而不是前面或后面的数字。
答案 1 :(得分:1)
您的表达式现在尝试匹配任意六个由4和5之间的数字组成的数字。在0到9之间。要修复此行为,您应该根据Jon的建议添加单词边界。
\b[4][0-9]{5}\b
有关字边界的更多内容:http://www.regular-expressions.info/wordboundaries.html
答案 2 :(得分:0)
您只需在正则表达式" 4[0-9]{5}"
的开头添加一个空格即可。如果你需要一种更通用的方法来查找数字的开头(它可能也是制表符,换行符等吗?)你应该看一下预定义的字符类 \s
。另请查看边界匹配器。我不知道你使用的是哪种语言,但正则表达式在大多数语言中都非常相似。请检查此Java regex documentation。
答案 3 :(得分:-1)
正则表达式中有一个行首字符:^
你可以这样做:
^4[0-9]{5}
如果数字不总是在一行的开头,你可以更普遍地使用:
\<4[0-9]{5}\>
仅匹配整个单词。 这两个例子都适用于egrep。