特定的正则表达式

时间:2015-02-25 01:46:55

标签: java regex

我希望从用户那里获取字符串输入并提取单词或数字,如下所示:

String problem = "I'm lo#o@king t%o ext!r$act a^ll 6 su*bs(tr]i{ngs.";

String[] solve = {"I'm", "looking", "to", "extract", "all", "6", "substrings"};

基本上,我想提取数字和单词而完全忽略除了撇号之外的标点符号。我知道如何获得单词和字符串,但我似乎无法弄清楚这个棘手的部分。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

String s = "I'm lo#o@king t%o ext!r$act a^ll 6 su*bs(tr]i{ngs.";
String parts[] = s.replaceAll("[^\\s\\w']|(?<!\\b)'|'(?!\\b)", "").split("\\s+");
System.out.println(Arrays.toString(parts));

输出:

[I'm, looking, to, extract, all, 6, substrings]

<强>解释

  • [^\\s\\w']匹配任何字符,但不匹配空格或单引号或字符。

  • (?<!\\b)'(?!\\b)只有在'符号前面没有符号后才会匹配。

  • replaceAll函数用空字符串替换所有匹配的字符。

  • 最后,我们根据一个或多个空格字符对结果字符串进行拆分。