我将这个文本文件读入到Java应用程序中,然后逐行计算其中的单词。现在,我用一个
String.split([\\p{Punct}\\s+])"
但我知道我遗漏了文本文件中的一些单词。例如,单词"can't“应该分为两个单词"can”和"t“。
逗号和其他标点符号应该完全忽略,并被视为空格。我一直在试图理解如何形成一个更精确的正则表达式来实现这一点,但我是一个新手,所以我需要一些帮助。
对于我所描述的目的,还有什么比正则表达式更好的?
发布于 2011-09-12 16:25:03
有一个非字面量,\W
,参见Pattern
。
String line = "Hello! this is a line. It can't be hard to split into \"words\", can it?";
String[] words = line.split("\\W+");
for (String word : words) System.out.println(word);
给出
Hello
this
is
a
line
It
can
t
be
hard
to
split
into
words
can
it
发布于 2011-09-12 16:16:13
发布于 2011-09-12 16:18:32
尝试:
line.split("[\\.,\\s!;?:\"]+");
or "[\\.,\\s!;?:\"']+"
这是以下字符之一的或匹配:., !;?:"'
(请注意,其中有一个空格,但没有/或)+使几个字符一起被计为一个字符。
这应该会给你一个足够的准确性。更精确的正则表达式需要更多关于需要解析的文本类型的信息,因为‘也可以是一个单词分隔符。大多数情况下,大多数标点符号分隔符都在空格周围,因此在[\\s]+
上进行匹配也是非常接近的。(但对简短的引语给出了错误的计数,比如:她说:“不”。)
https://stackoverflow.com/questions/7384791
复制相似问题