Regex для всего * после * первого полного предложения (точка и пробел) * после * N символов - PullRequest
1 голос
/ 14 декабря 2010

Я хотел бы получить более умные выдержки из разделов текста.Поскольку я буду использовать функцию regex_replace Movable Type, я буду пытаться захватить все после первых нескольких предложений.

Хотя \..* получает все после первого периода, что часто оставляет слишком короткимвыдержка.Как я могу сделать то же самое (все после первого периода), но пропустить первые 100 символов?

В качестве альтернативы, как бы мне просто взять все, скажем, после второго или третьего периода?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

Полное предложение расплывчато, поскольку разные языки имеют разные способы кодирования конца предложения. Давайте предположим, что пробел после точки - EOS: /^.*?\.\s+(?:.{N})(.*)/ Заменить N на желаемое число.

0 голосов
/ 14 декабря 2010

Не знаком с regex_replace, я буду использовать функцию PHP preg_replace, и вы сможете соответственно адаптировать:

$truncated = preg_replace('/^(.{100}.*?\.).*$/s', '$1', $long);

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

И еще одна версия, которая будет стараться не разбивать числа с десятичной точкой (или в других местах, где точка может возникнуть где-то в другом месте).чем конец предложения):

$truncated = preg_replace('/^(.{100}.*?\.(?![a-z0-9])).*$/s', '$1', $long);

Объяснение:

  1. Часть, которую вы хотите сохранить, сгруппирована с круглыми скобками.
  2. Вы сохраните вне менее 100 символов: .{100}
  3. После этого вы будете сохранять любые следующие символы до первого десятичного знака: .*?\.
  4. Во второй версии я использовал отрицательный прогноз - (?![a-z0-9]) - который заставит последнюю часть перейти к следующему десятичному знаку, если за символом точки следует либо цифра, либо буква.
  5. Точка соответствует новой строке (модификатор s в концешаблон).Если функция Movable Type regex_replace берет шаблон без разделителей (начальная косая черта и конечный /s в моем шаблоне), вы можете вместо этого использовать (?s) в начале шаблона.
  6. Использовать $1 в замене сохранить первую захваченную группу.
...