用于排除char的正则表达式交集不会起作用

时间:2016-08-20 17:44:56

标签: java regex

我有一些这种形式的字符串[3 4.0:ad},我需要替换所有空格和数字,但.(正确解析de float需要)

所以我写了这个正则表达式

\D*!.|\s+

但是没有用,我还没有理解我使用的正确语法

\D*选择非数字字符

!.从选择中排除.

|\s+选择所有空格

如果我移除交叉点!.,那么我使用它的方式是错误的。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你可以使用这样的否定字符类:

str = str.replaceAll("[^\\d.]+", "");

[^\\d.]将匹配任何非数字而非DOT的字符。

RegEx Demo

btw \D还包含空格,因此不需要在正则表达式中提供。

答案 1 :(得分:1)

正如它所说here,Java类交集
class1 class2 中的内容的子集。

相当简单的概念,但使用起来可能很棘手 最后,编译器会将此解析为单个类,所以如果是 结果很短且很明显,自己做的更好。

示例:

不是数字\D
不是点[^.]

你想匹配空格,这是非数字的一部分所以不用担心 关于那个。

因此交叉点是[\D&&[^.]]
它读作 Not Digits Not Dots

翻译是[^\d.],编译器将其解析为。{1}}。

当你的内部有很多洞时,交汇的真正力量就来了 要排除的字符范围。

例如,除元音[a-z&&[^aeiou]]

以外的所有字母