【发布时间】:2017-04-24 17:33:39
【问题描述】:
我正在尝试在包含单词、数字和特殊字符的字符串中查找标记。我尝试了以下代码:
String Pattern = "(\\s)+";
String Example = "This `99 is my small \"yy\" xx`example ";
String[] splitString = (Example.split(Pattern));
System.out.println(splitString.length);
for (String string : splitString) {
System.out.println(string);
}
得到以下输出:
This:`99:is:my:small:"yy":xx`example:
但我真正想要的是这个,即我希望特殊字符也作为单独的标记:
This:`:99:is:my:small:":yy:":xx:`:example:
我尝试将特殊字符放入模式中,但现在特殊字符完全消失了:
String Pattern = "(\"|`|\\.|\\s+)";
This::99:is:my:small::yy::xx:example:
我将通过什么模式获得我想要的输出?还是我应该尝试一种不同于使用正则表达式的方法?
【问题讨论】:
-
见ideone.com/lm0ioP。
_呢,对你来说是不是特别的字符? -
@WiktorStribiżew 的答案是正确的,因为
"也应该是“标记化”的,但在 OP 的输出中,对于\"yy\",以下字符串应该是":yy:"。在这种情况下,请在第 13 行使用Pattern ptrn = Pattern.compile("(\"(?:[\\w]+|[\\d]+)\"|\\b[\\w\\d]+|[^\\s])");。 -
@Mateus:我已经接受了 WiktorStribiżew 给出的答案,但是你的正则表达式版本对我来说更好,因为我在这里得到了 example_and_more。谢谢。