2014-01-25 2 views
0

Я хочу разбить текст на отдельные слова, используя регулярные выражения. Очевидным решением было бы использовать регулярное выражение \\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 
.... 
+1

Пример входных данных и ожидаемых матчей пожалуйста! – anubhava

+0

arghh! квантификатор с '\\ b' не имеет смысла! –

ответ

3

Это должно сделать трюк, даже если lookaheads не доступны:

[^\w\-]+ 

Также не вы, а кто-то, кто нуждается в этом для другой цели (т.е. вставляя что-то) это скорее эквивалент к \b -решений:

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

, потому что:

Есть три различных положения, которые квалифицируются как границы слова:

  • Перед первым символ в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой не является символом слова.

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

+0

Ваш второй, кажется, работает –

+0

+1 Хороший шаблон <°))))))> –

+0

@CasimiretHippolyte Просто изменил его D: но его более точно сейчас, на мой взгляд. – Matmarbon

1

Вы можете использовать это:

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

это работает. Спасибо :) Я приму это, как только смогу –

Смежные вопросы