Java String replaceAll regex 删除除数字、点和空格以外的所有内容

LPV*_*OID 5 java regex string

我浏览了很多正则表达式主题,但这些主题都没有让我在我的特定情况下取得成功。

(使用java)我有一些字符序列,然后我将其转换为数组并将数字提取到双精度数组。

asdsad 59 asdf .2 asdf 56 89 .a 2.4 wef 95 asdf。

然后我想使用正则表达式删除多余的部分并组成以下字符串

59 2 56 89 2.4 95

这样我就可以使用.split(" ")并将它们全部放入双打数组中。

直到这一刻,我使用了以下表达式

[^0-9.\s]
Run Code Online (Sandbox Code Playgroud)

但它留下了额外的点,因此不可靠。现在我正在尝试类似的东西

[^0-9.\s]|([^0-9]\.[^0-9])
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用,我对正则表达式不是很擅长,所以你能解释一下为什么最后一个表达式不起作用以及如何解决它。

Boh*_*ian 1

您可以直接在此正则表达式上拆分:

([^\d.]|\B\.|\.\B)+
Run Code Online (Sandbox Code Playgroud)

IE

String[] parts = str.split("([^\\d.]|\\B\\.|\\.\\B)+");
Run Code Online (Sandbox Code Playgroud)

尽管这(可能)会在数组中留下一个前导空白。

要直接转到一行double[](处理前导空白):

double[] numbers = Arrays.stream(str.split("([^\\d.]|\\B\\.|\\.\\B)+"))
    .filter(s -> !s.isEmpty())
    .mapToDouble(Double::parseDouble)
    .toArray();
Run Code Online (Sandbox Code Playgroud)

请参阅现场演示。