java 正则表达式 如何匹配固定长度的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 正则表达式 如何匹配固定长度的数字相关的知识,希望对你有一定的参考价值。

我要在下面的数据中找出名字为id,长度为10的数字串。
"comments":["created_at":"Mon Nov 04 21:19:49 +0800 2013","id":3641023823933285,"text":"太可爱了","source":"<a href=\"http://app.weibo.com/t/feed/qsbvs\" rel=\"nofollow\">手机微博触屏版</a>","user":"id":2899165811,"idstr":"2899165811","class":1,"screen_name":‘’haha‘

即要找出"id":2899165811
我用的正则表达式是 "\"id\":([0-9]d10)"
但是结果显示的有3641023823和2899165811。也就是把"id":3641023823933285中前10个数留下了。
想问如何才能直接丢掉"id":3641023823933285?
求助啊~~~

有点看不明白你问的是什么。我的理解是你是要截取3641023823933285这个字段的前十位数字,但是你的正则表达式赛选出了2899165811,因为你的正则表达式是寻找连续的10为数字,所以2899165811当然符合要求,如果要截取的字段都是和3641023823933285长度一样的话你的正则表达式的长度应该是16,然后从正则表达式赛选出来的结果中截取前10位。追问

好吧,我的意思是只要连续的十位数字,但是结果却把3641023823933285的前十位也给我了。
不过还是很感谢你~~~

追答

Pattern pattern = Pattern.compile("\"id\":\\d10,");
Matcher matcher = pattern.matcher(value);
while(matcher.find())
String findValue=matcher.group();
System.out.println(findValue);
System.out.println(findValue.substring(0, findValue.length()-1));

参考技术A 通过正则表达式直接丢掉较长的数据很难办到,可以在结果中根据字符串长度进行一次判定:
Pattern pattern = Pattern.compile("\"id\":\\d10,");
Matcher matcher = pattern.matcher(input);
while(matcher.find())
if(matcher.group().length() == 15)
System.out.println(matcher.group());

追问

试了一下,还是不行。不过同样感谢

参考技术B 你可以找出"id":2899165811,(加逗号)嘛,如果10位数后面没有逗号则不匹配追问

但是如何才能在打印时不打出逗号呢?数据太多了,没法手动删除呀。

追答

substring截取一下,结果不是类似"id":2899165811,这种固定格式嘛,长度16位,截取到15位OK了呀substring(15)

正则表达式匹配具有不同数字和最小长度的数字

【中文标题】正则表达式匹配具有不同数字和最小长度的数字【英文标题】:Regex to match number with different digits and minimum length 【发布时间】:2018-05-04 07:30:09 【问题描述】:

我正在尝试编写一个正则表达式(用于验证 ac# .NET Core 模型上的属性,该模型会生成 javascript 表达式)以匹配由至少两个不同数字组成且最小长度为 6 位的所有数字。

例如:

222222 - 无效

122222 - 有效

1111125 - 有效

我正在尝试以下表达式:(\d)+((?!\1)(\d)),如果有不同的数字,它匹配序列但是我如何将整个模式的大小限制为6,

非常感谢

【问题讨论】:

你有时间检查我的答案吗?请检查它是否按您预期的方式工作。 【参考方案1】:

你可以使用

^(?=\d6)(\d)\1*(?!\1)\d+$

见regex demo

详情

^ - 字符串开头 (?=\d6) - 至少 6 位数字 (\d) - 任何数字都被捕获到第 1 组 \1* - 在第 1 组中捕获的值出现零次或多次 (?!\1) - 下一个数字不能与第 1 组中的相同 \d+ - 1+位 $ - 字符串结束。

【讨论】:

以上是关于java 正则表达式 如何匹配固定长度的数字的主要内容,如果未能解决你的问题,请参考以下文章

具有至少 1 个数字和 1 个字符且固定长度为 11 的字母数字字符串的正则表达式

java 正则怎么匹配符号加中文

如何写匹配任意个26个大小写字母,数字和下划线的Java正则表达式呢?

mysql 正则表达式替换,把指定位置随机数替换成固定数字

如何用固定长度和许多元素编写这个正则表达式

正则表达式怎么匹配字符串中最后一串数字?