3

我需要一个只有单词的明文,不包括所有数字、多余的空格、破折号、逗号、点、括号等。它用于单词生成算法(取自 gamasutra)。我想正则表达式可以在这里提供帮助。如何在 String.split 的帮助下做到这一点?

升级版:

输入:我有 1337 个这样的字符串,其中包含不同的内容:逗号、许多空格、数字 - 2 3 4、破折号。我怎样才能删除所有的东西?

输出:我有这样一个字符串,里面有不同的东西逗号很多空格数字破折号我怎样才能删除所有的东西

4

3 回答 3

4

您可以分两步进行:

String s = "asd asd   asd.asd, asd";
String clean = s.replaceAll("[\\d[^\\w\\s]]+", " ").replaceAll("(\\s{2,})", " ");
System.out.println(clean);

第一步删除所有不是字母或空格的字符,并用空格替换它们。第二步将多个空格仅删除一个空格。

输出:

asd asd asd asd asd


如果您只需要一个包含单词的数组,那么这就足够了:

String[] words = s.trim().split("[\\W\\d]+");
于 2013-06-12T08:40:34.103 回答
3

如果您关心 Unicode(您应该),请使用Unicode 属性

String[] result = s.split("\\P{L}+");

\p{L}是任何语言字母的 Unicode 属性。

\P{L}是 的否定\p{L},意味着它将匹配所有不是字母的东西。(我明白这就是你想要的。)

于 2013-06-12T08:49:04.177 回答
1

我会这样做

    str = str.replaceAll("\\s+", " ");
    str = str.replaceAll("\\p{Punct}|\\d", "");
    String[] words = str.split(" ");
于 2013-06-12T08:40:19.877 回答