加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通过拆分正则表达式从Java中的String中提取数字

发布时间:2020-12-14 06:23:14 所属栏目:百科 来源:网络整理
导读:我想从字符串中提取数字,如下所示: String numbers[] = "M0.286-3.099-0.44c-2.901,-0.436,123,0.123,.34".split(PATTERN); 从这样的字符串我想提取这些数字: 0.286 -3.099 -0.44 -2.901 -0.436 123 0.123 .34 那是: 可能有垃圾字符,如“M”,“c”,“c”
我想从字符串中提取数字,如下所示:
String numbers[] = "M0.286-3.099-0.44c-2.901,-0.436,123,0.123,.34".split(PATTERN);

从这样的字符串我想提取这些数字:

> 0.286
> -3.099
> -0.44
> -2.901
> -0.436
> 123
> 0.123
> .34

那是:

>可能有垃圾字符,如“M”,“c”,“c”
>“ – ”符号将包含在数字中,而不是分开
>“数字”可以是Float.parseFloat可以解析的任何内容,因此.34有效

到目前为止我所拥有的:

String PATTERN = "([^d.-]+)|(?=-)";

这在某种程度上起作用,但显然远非完美:

>在示例中不跳过起始垃圾“M”
>不处理连续垃圾,如中间的,

如何修复PATTERN以使其工作?

你可以使用这样的正则表达式:
([-.]?d+(?:.d+)?)

Working demo

比赛信息:

MATCH 1
1.  [1-6]   `0.286`
MATCH 2
1.  [6-12]  `-3.099`
MATCH 3
1.  [12-17] `-0.44`
MATCH 4
1.  [18-24] `-2.901`
MATCH 5
1.  [25-31] `-0.436`
MATCH 6
1.  [34-37] `123`
MATCH 7
1.  [38-43] `0.123`
MATCH 8
1.  [44-47] `.34`

更新

Jawee的方法

正如Jawee在他的评论中指出的那样.34.34存在问题,所以你可以使用他的正则表达式解决这个问题.感谢Jawee指出这一点.

(-?(?:d+)?.?d+)

要了解这个正则表达式背后发生的事情你可以查看Debuggex
图片:

发动机说明:

1st Capturing group (-?(?:d+)?.?d+)
   -? -> matches the character - literally zero and one time
   (?:d+)? -> d+ match a digit [0-9] one and unlimited times (using non capturing group)
   .? matches the character . literally zero and one time
   d+ match a digit [0-9] one and unlimited times

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读