使用正则表达式“清理”字符串

时间:2013-06-12 08:34:15

标签: java regex split

我需要一个只包含单词的明文,不包括所有数字,额外空格,短划线,逗号,圆点,括号等。它用于单词生成算法(取自gamasutra)。我想正则表达式可以在这里提供帮助。如何在String.split的帮助下完成这项工作?

UPD:

  

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

     

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

3 个答案:

答案 0 :(得分:3)

您可以分两步完成:

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


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

String[] words = s.trim().split("[\\W\\d]+");

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

我会这样做

    str = str.replaceAll("\\s+", " ");
    str = str.replaceAll("\\p{Punct}|\\d", "");
    String[] words = str.split(" ");