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:但我认为现在更准确了。不过,为什么你要在第一个字符之前和最后一个字符之后分割?那不会返回空字符串吗?