首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中,通过标点符号和空格等将字符串拆分为正则表达式

在java中,通过标点符号和空格等将字符串拆分为正则表达式
EN

Stack Overflow用户
提问于 2011-09-12 15:53:02
回答 4查看 59.1K关注 0票数 29

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

代码语言:javascript
复制
String.split([\\p{Punct}\\s+])"

但我知道我遗漏了文本文件中的一些单词。例如,单词"can't“应该分为两个单词"can”和"t“。

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

对于我所描述的目的,还有什么比正则表达式更好的?

EN

回答 4

Stack Overflow用户

发布于 2011-09-12 16:25:03

有一个非字面量,\W,参见Pattern

代码语言:javascript
复制
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);

给出

代码语言:javascript
复制
Hello
this
is
a
line
It
can
t
be
hard
to
split
into
words
can
it
票数 14
EN

Stack Overflow用户

发布于 2011-09-12 16:16:13

好吧,看到你想算作can't这两个词,试试

代码语言:javascript
复制
split("\\b\\w+?\\b")

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

票数 0
EN

Stack Overflow用户

发布于 2011-09-12 16:18:32

尝试:

代码语言:javascript
复制
line.split("[\\.,\\s!;?:\"]+");
or         "[\\.,\\s!;?:\"']+"

这是以下字符之一的或匹配:., !;?:"' (请注意,其中有一个空格,但没有/或)+使几个字符一起被计为一个字符。

这应该会给你一个足够的准确性。更精确的正则表达式需要更多关于需要解析的文本类型的信息,因为‘也可以是一个单词分隔符。大多数情况下,大多数标点符号分隔符都在空格周围,因此在[\\s]+上进行匹配也是非常接近的。(但对简短的引语给出了错误的计数,比如:她说:“不”。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7384791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档