通过java中的标点符号和空格等通过正则表达式拆分字符串

我有这个文本文件,我读入Java应用程序,然后逐行计算其中的单词。 现在我正在将这些行分成一个单词

String.split([\\p{Punct}\\s+])" 

但我知道我错过了文本文件中的一些单词。 例如,“不能”这个词应该分为两个词“can”和“t”。

应完全忽略逗号和其他标点符号,并将其视为空格。 我一直试图理解如何形成一个更精确的正则表达式来做到这一点,但我是一个新手,所以我需要一些帮助。

对于我所描述的目的,什么可以是更好的正则表达式?

你的正则表达式中有一个小错误。 尝试这个:

 String[] Res = Text.split("[\\p{Punct}\\s]+"); 

[\\p{Punct}\\s]+将字符类中的+表单移动到外部。 另外明智的是你也在+上分裂并且不要连续组合分裂字符。

所以我得到了这个代码

 String Text = "But I know. For example, the word \"can\'t\" should"; String[] Res = Text.split("[\\p{Punct}\\s]+"); System.out.println(Res.length); for (String s:Res){ System.out.println(s); } 

这个结果

10

一世
知道
对于



能够
Ť
应该

哪个应符合您的要求。

作为替代方案,您可以使用

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

\\P{L}表示不是具有“Letter”属性的unicode代码点

有一个非单词文字, \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 

好吧,看到你想要数不能算作两个字,试试吧

 split("\\b\\w+?\\b") 

http://www.regular-expressions.info/wordboundaries.html

尝试:

 line.split("[\\.,\\s!;?:\"]+"); or "[\\.,\\s!;?:\"']+" 

这是其中一个字符的匹配或匹配: ., !;?:"' (注意那里有一个空格但没有/或\)+会导致几个字符一起计为一个字符。

这应该给你一个足够的准确性。 更精确的正则表达式需要有关您需要解析的文本类型的更多信息,因为’也可以是单词分隔符。 大多数标点符号的单词分隔符都围绕着一个空格,因此[\\s]+上的匹配也是一个近似的近似值。 (但在短引号上给出了错误的统计数据,例如:她说:“不”。)