2015-10-26 4 views
0

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

Regex.Split (input, @ "(? <= [\.! \?])"); 

Однако это только обрабатывает предложения, которые заканчиваются одним символом, в то время как я хочу, чтобы иметь возможность обрабатывать предложения, которые заканчиваются с любым из“ ... ","! ","! .. ","? ","? .. ","?! ","?!. ","!? ","!?. ","‽ " или "‽..".

Для простого случая с только "." и «...», например „шустрая лиса Простого путь а ... Qwerty.“, я написал следующий код:

string [] sentences = Regex.Split (input, @ "(? <= \. \. \. | \.)"); 

Однако, это разбивает строку вверх, как ниже:

  • Быстро коричневый лисица.
  • Простой способ пойти abc.
  • .
  • .
  • Qwerty.

В то время как я хочу это:

  • шустрая лиса.
  • Простой способ передвижения abc ...
  • Qwerty.

Как написать регулярное выражение для этого?

Таким образом, решение

(?<=\.)\s*(?=[^.]) 

Demo

+1

у вас есть пробелы между ними периодов в вашей модели, и почему вы ищете осмотреться? попробуйте что-то вроде '\. \. \. \ \ .' без lookbehind или пробелов (EDIT: я понимаю, почему вы хотите, чтобы lookbehind теперь, но избавиться от пробелов) –

+1

В общем, я не уверен, что регулярное выражение будет достаточно мощным.Как, например, как вы разделите Смит не мог понять его регулярное выражение. Он искал StackOverflow и т. Д., Но ничего не нашел. – Xophmeister

+0

Но тогда строка будет без точек. И мне нужны строки с точками –

ответ

0

Обновление @ регулярное выражение Авинаш, в (?<=\.)\s*(?=[^.]) (demo) должен решить вашу проблему.

Объяснение:

  • (?<=\.) утверждает, что следующая строка предшествует точка
  • \s* соответствует нулю или более символов пробела (отбрасывая их в замене)
  • (?=[^.]) утверждает, что строка за которой следует любая строка, которая не является точкой (поэтому игнорируются многочисленные точки)
+0

Вы должны включить регулярное выражение в свой ответ. – lintmouse

0

Добавить в избранное е уверен, что есть предложение заканчивается знак, матч все пробелы и знаки:

(?= *[.!?])([ .?!]+) 

Demo

+0

Отображает предложение, затем точки –

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