gpt4 book ai didi

java - 通过拆分正则表达式从 Java 中的字符串中提取数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:31 24 4
gpt4 key购买 nike

我想像这样从字符串中提取数字:

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

enter image description here

匹配信息:

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 图片:

Regular expression visualization

引擎说明:

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

关于java - 通过拆分正则表达式从 Java 中的字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com