31

我正在尝试用 Java 编写一个正则表达式,它从段落中删除所有非字母数字字符,除了单词之间的空格。

这是我写的代码:

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\s]", "");

但是,编译器给了我一条错误消息,指向 s 说它是一个非法的转义字符。在我将 \s 添加到正则表达式的末尾之前,程序编译正常,但问题是段落中单词之间的空格被删除了。

我该如何解决这个错误?

4

5 回答 5

52

您需要双重转义\字符:"[^a-zA-Z0-9\\s]"

Java 将解释\s为 Java 字符串转义字符,这确实是无效的 Java 转义。通过编写\\,您可以转义\字符,本质上是将单个\字符发送到正则表达式。这\然后成为正则表达式转义字符的一部分\s

于 2012-08-03T13:48:10.757 回答
12

您需要转义 \ 以便正则表达式识别 \s :

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\\s]", "");
于 2012-08-03T13:49:10.003 回答
4

维多利亚,你\\s不能\s在这里写。

于 2012-08-03T13:48:16.997 回答
4

通常,每当您看到该错误时,这意味着您只有一个反斜杠,而您需要两个反斜杠:

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\\s]", "");
于 2012-08-03T13:48:33.243 回答
1

请查看此站点,您可以在线测试 Java Regex 并获取格式正确的 regex 字符串模式:

http://www.regexplanet.com/advanced/java/index.html

于 2014-08-13T13:41:42.490 回答