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

Regex 将文本拆分为单词并排除连字符,regex,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+");

我想使用正则表达式将文本拆分为单个单词。显而易见的解决方案是使用正则表达式
\\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]);
}
预期产出:

...
like

user-generated

and
....
@Matmarbon解决方案已经非常接近了,但并不是100%适合我

...
like

user-
generated

and
....

即使lookaheads不可用,这也应该可以做到:

[^\w\-]+
也不是您,而是出于其他目的(即插入某物)需要此功能的人。这更等同于
\b
-解决方案:

([^\w\-]|$|^)+
因为:

有三种不同的位置可以作为单词边界:

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

---

即使找不到lookahead,这也应该可以:

[^\w\-]+
也不是您,而是出于其他目的(即插入某物)需要此功能的人。这更等同于
\b
-解决方案:

([^\w\-]|$|^)+
因为:

有三种不同的位置可以作为单词边界:

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

您可以使用以下功能:

(?<!-)\\b(?!-)
(?您可以使用:

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

(?示例输入和预期匹配请!arghh!带有
\\b
的量词没有意义!示例输入和预期匹配请!arghh!带有
\\b
的量词没有意义!@casimimirithippolyte刚刚更改了它D:但在我看来现在更准确了。你为什么要在第一个字符之前和最后一个字符之后分割r、 不过?那不会返回空字符串吗?@CasimiritHippolyte刚刚更改了它D:但我认为现在更准确了。不过,为什么你要在第一个字符之前和最后一个字符之后分割?那不会返回空字符串吗?