我想从字符串中提取数字,如下所示:
String numbers[] = "M0.286-3.099-0.44c-2.901,-0.436,,,123,0.123,.34".split(PATTERN);
Run Code Online (Sandbox Code Playgroud)
从这样的字符串我想提取这些数字:
那是:
Float.parseFloat可以解析的东西,因此.34是有效的到目前为止我所拥有的:
String PATTERN = "([^\\d.-]+)|(?=-)";
Run Code Online (Sandbox Code Playgroud)
这在某种程度上起作用,但显然远非完美:
,,,在中间一样如何修复PATTERN以使其工作?
您可以使用这样的正则表达式:
([-.]?\d+(?:\.\d+)?)
Run Code Online (Sandbox Code Playgroud)

比赛信息:
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`
Run Code Online (Sandbox Code Playgroud)
更新
正如Jawee在他的评论中指出的那样,存在问题.34.34,因此您可以使用他的正则表达式来解决此问题。感谢 Jawee 指出这一点。
(-?(?:\d+)?\.?\d+)
Run Code Online (Sandbox Code Playgroud)
要了解此正则表达式背后发生的情况,您可以检查此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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |