2013-02-18 2 views
1

Я хочу разбить текст на предложения. Мой текст содержит \n символ между ними. Я хочу, чтобы расщепление проводилось в \n и . (точка). Я не могу использовать BreakIterator как условие расщепления, так как это пробел, за которым следует период (в тексте я хочу разделить, что не обязательно).Разбиение на предложения Java

Пример:

i am a java programmer.i like coding in java. pi is 3.14\n regex not working 

Должен ли выход:

['i am a java programmer', 'i like coding in java', 'pi is 3.14', 'regex not working'] 

Я попытался простой регулярное выражение, которое расщепляется на любой \n или .:

[\\\\n\\.] 

Это не работает хотя, указав отдельно работает.

\\\\n 
\\. 

Так может кто-нибудь дать регулярное выражение, которое будет разделить на любой \n или .?

Другая проблема заключается в том, что я не хочу, чтобы расщепление выполнялось в случае десятичных знаков, таких как 5.6.

+0

Что делать, если у вас есть что-то вроде «blah blah U.S.». Вы хотите считать это одним предложением или двумя предложениями? –

ответ

2

Использование string.split("[\n.]") разделить на \n или .

Внутри символьного класса, . не имеет особого смысла. Таким образом, нет никакой необходимости избежать .

Edit:string.split("\n|[.](?<!\\d)(?!\\d)") избегает расщепления десятичных чисел.

Здесь, для каждого ., нужно посмотреть, есть ли цифра с обеих сторон. Если оба не являются числами, применяется разделение.

\n|\\.(?!\\d)|(?<!\\d)\\. исключает сплит для . с цифрами с обеих сторон.

\n|(?<!\\d)[.](?!\\d) избегает раскола, если любая из сторон имеет цифру

Так , что вам нужно может быть

string.split("\n|\\.(?!\\d)|(?<!\\d)\\.") 

который расщепляет something.4 но не 3.14

+0

, который также разделил бы «5.6» – ellak

+0

OK. Но как не расколоться на «5.6»? Я новичок в регулярных выражениях ... – user1523170

+1

@ user1523170 попробовал отредактированный файл –

9

Это Java регулярное выражение должно идти это:

"\n|((?<!\\d)\\.(?!\\d))" 

очки здесь:

  • вам не нужно, чтобы избежать \n, когда
  • те странные вещи, глядя вокруг точки отрицательны обходные взгляд, и означает «предыдущий/следующий символ не должен быть цифрой

Это регулярное выражение говорит: «либо символ новой строки, или буквальным точка, которая не предшествует или следует цифра


FYI, вам не нужно бежать символов в классе символов (между []), за исключением самих скобок.

+0

Спасибо! это сделал трюк! – user1523170

+2

@Bohemian, о каких-то ** некоторых текстах.5 вещей чего-то ** –

+0

@naveedS добавил отрицательный внешний вид, чтобы потребовать не цифры, как до, так и после точки. Обратите внимание, что это регулярное выражение будет пытаться отличить десятичное число, как в вопросе от этого несчастливого совпадения двух предложений: «У меня есть 3,6 стрелков.» – Bohemian

0

Вам не нужно дважды бежать вещи в регулярном выражении Java в [] блоке:

[.\n] 

должен работать.

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