将文本拆分为单词并排除连字符

时间:2014-01-25 18:20:41

标签: regex

我想使用正则表达式将文本拆分为单个单词。显而易见的解决方案是使用正则表达式\\b,不幸的是,这个也会在连字符上拆分。

所以我正在搜索与\\b完全相同的表达式,但不会在连字符上拆分。

感谢您的帮助。

示例:

String s = "This is my text! It uses some odd words like user-generated and need therefore a special regex.";

String [] b = s.split("\\b+");
for (int i = 0; i < b.length; i++){
    System.out.println(b[i]);
}

输出:

This

is

my

text
! 
It

uses

some

odd

words

like

user
-
generated

and

need

therefore

a

special

regex
.

预期产出:

...
like

user-generated

and
....

@Matmarbon解决方案已经非常接近,但不是100%适合它给我

...
like

user-
generated

and
....

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题,即使前瞻不可用:

[^\w\-]+

也不是你,而是为了另一个目的而需要它的人(即插入一些东西),这更像是\b - 解决方案:

([^\w\-]|$|^)+

,因为:

  

有三种不同的职位符合词边界:

     
      
  • 在字符串中的第一个字符之前,如果第一个字符是单词字符。
  •   
  • 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
  •   
  • 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
  •   

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

答案 1 :(得分:1)

您可以使用:

(?<!-)\\b(?!-)