好的,所以这是众多正则表达式问题中的一个,我搜索时没有找到答案。
我想知道字符串是否包含四位数字,但数字不是整个字符串。它也必须在5位数字上失败。
所以,这就是我今天所拥有的:\d{4}[^\d]
这适用于我的大多数情况,但如果四位数字位于字段的末尾则会中断。
实施例
#3333, INC343334 => I want 3333
dddd => I want no match
3333 => I want 3333
RT4323, INC33334434 => I want 4323
INC23455667, #3333 => I want 3333
答案 0 :(得分:1)
你可以使用负向前瞻和负后瞻来测试你的4位数字是否被其他数字包围:
(?<!\d)\d{4}(?!\d)
这不符合过滤由仅四位数字组成的字符串的要求。我建议单独使用这个过滤器,比如这个psuedocode:
regex = /(?<!\d)\d{4}(?!\d)/;
strings.filter(s -> s.length != 4).filter(s -> regex.find(s).matches())