Я получаю регулярное выражение (совместимое с php/perl), чтобы получить первое предложение из некоторого текста. Я понимаю, что это может стать огромным, если охватить все случаи, но только после того, что на данный момент будет «достаточно хорошим». Кто-нибудь получил что-то от полки для этого?Первое предложение регулярных выражений
ответ
хорошо, /^[^.]+/
является самым простым один
Да, у меня было это, ну у меня были strpos ($ content, '.'), Но, например, или [email protected] не так хорошо, не говоря уже о вопросах? – Tim
Я закончил с /^.{150,}?[.?!]+(?=\s|$)/, поскольку я хотел, чтобы действительно короткие предложения были упущены. Спасибо также Крису Лутцу, который хорошо объяснил сложности проблемы. – Tim
P.S. И если нет совпадения, я делаю preg_replace ('/ \ s +? (\ S +)? $ /', '', Substr ($ content, 0, $ max_length = 200)) .'... '; сломать первое пространство после 200 символов. – Tim
Если приговор «строка», то просто соответствовать первому ^.*
из куска текста. По умолчанию DOT не соответствует новым строковым символам.
Если это действительно первое предложение, сделать что-то вроде этого: ^[^.!?]*
Я знаю, что вы просто хотите что-нибудь, что работает сейчас, но this mailing list post придумал /^[^\.]*\.\s/
и subsequent post придумали ([\s\S]+?)\.(|\r|\n)
.
Хотя эти шаблоны кажутся подходящими только для периодов, это зависит от вас, если вы хотите изменить его так же, как и для других типов знаков препинания, таких как восклицательные знаки и знаки вопросов.
Что относительно предложений, которые заканчиваются с помощью '!' Или '?'. –
Вот что я сказал в своем посте, хе-хе. –
Тогда можно использовать это:/\ A (. +?) [.?!] (| \ R | \ n)/s – leticia
/\A(.+?)[.?!] /s
соответствует всем, пока одна из этих знаков препинания не следует пробелу. вот что такое предложение, не так ли? точка должна соответствовать новые линии
Так много для г-на Реджекса и его предложения. –
Прошу прощения? – SilentGhost
Проверьте свое регулярное выражение на это - он будет анализировать как два предложения из-за г-на –
Это работает в .NET:
/(?<=^\s*)(?!\s)("(\<'.*?'\>|.)*"|.)*?((?<='*"*)|[.?!]+|$)(?=\ \ |\n\n|$)/s
Ручки кавычки (в американском стиле) («, как это„ и это“Да, с пунктуацией» и кавычки) и предложений заканчивая несколькими пунктуациями. Также игнорирует предыдущие пробелы. Тем не менее, требуется два пробела или два конца строки и конец файла после предложений.
Ручки следующие хорошо:
Так много для г Regex и его соответствия предложения, как он говорит, «это предложение, это не замечательно Один говорит:«Это почти как если бы это было проработано? например, чисто ». Однако эта часть не должна совпадать.
Так много для мистера Реджекса и его приговора. –
@ Луц, так много для него. – strager
Вы проверили его? Я не думаю, что PHP поддерживает внешний вид переменной длины. – SilentGhost
Это не просто регулярное выражение, но я написал функцию Python для этого: Separating sentences. Обработка естественного языка, как известно, сложна, поэтому есть случаи, когда это неправильно относится к делу, но это хорошо справляется с некоторыми сложными случаями.
Это, безусловно, правильный подход - определение правил грамматики английского языка, а не попытка создания регулярного выражения, которое может быть свернуто и неточно. –
В конце концов, вам нужно провести естественный анализ языка, что крайне сложно сделать и, возможно, невозможно для регулярных выражений (даже супер-супых PCRE). Рассмотрите это предложение:
Так много для г-на Реджекса и его подходящего предложения.
Каждый ответ, полученный до сих пор, проанализирует это как два предложения, и это даже не так много случаев с краем - вполне разумно представить блок текста, начинающийся с «Уважаемый г-н Адамс:» или что-то вроде того. Вы можете прикоснуться к lookbehinds, чтобы проверить, что слово перед знаками пунктуации было, но это будет недостижимо, так как вы должны проверить на все возможные сокращения. Вы должны проверить г-на и т. Д. и co. и Св. и для многих других, о которых вы никогда не подумаете. Через некоторое время у вас может получиться «довольно хорошее» практическое решение, но оно будет уродливым, и однажды он потерпит неудачу.
Мое решение, похоже, работает и не очень уродливо. Однако он предполагает два пробела после каждого предложения. Он также не обрабатывает кавычки. – strager
Два пробела после каждого предложения хороши, если люди следуют за ним (я ненавижу его и никогда этого не делаю, поэтому, возможно, я просто предвзятый). Но ваше регулярное выражение - это точная точка, на которой я остановлюсь и говорю: «Это не работа для регулярных выражений». –
Я должен согласиться, что регулярные выражения не являются подходящим инструментом для работы. Но это достаточно хорошо для quick'n'dirty, и если это нужно сделать только один раз, но тысячу раз, регулярное выражение с коррекцией человека является IMO более эффективным, чем полный парсер языка (если не существует уже синтаксического анализатора, который используется) , – strager
- 1. Первое совпадение нескольких регулярных выражений
- 2. Как пропустить первое совпадение регулярных выражений?
- 3. Извлечь первое предложение из строки текста
- 4. множественность множественных выражений регулярных выражений
- 5. регулярных выражений (регулярных выражений) в vb.net
- 6. Получение регулярных выражений (регулярных выражений) в Stata
- 7. Использование регулярных выражений в Python
- 8. Найти первое найденное регулярное выражение из списка регулярных выражений
- 9. затмение поиска/замены регулярных выражений - найти первое появление персонажа
- 10. Поиск в группе регулярных выражений Python возвращает только первое совпадение
- 11. Регулярных выражений
- 12. регулярных выражений
- 13. JSF2 валидатор регулярных выражений
- 14. Регулярное совпадение регулярных выражений
- 15. Удалить совпадение регулярных выражений, помещенных внутри других регулярных выражений
- 16. Объединение выражений 2 регулярных выражений
- 17. Устранение собственных регулярных выражений
- 18. Автоматическое построение регулярных выражений
- 19. комплекс регулярных выражений ситуация
- 20. Jmeter Номер совпадения регулярных выражений
- 21. использование регулярных выражений с python
- 22. Rspec 3: проверка проверки регулярных выражений регулярных выражений
- 23. Преобразование C++ Повышение регулярных выражений в Python повторно регулярных выражений
- 24. Правила двигателей регулярных выражений. Жадность, рвение и леность регулярных выражений
- 25. Предварительно построенные шаблоны регулярных выражений или библиотеки регулярных выражений?
- 26. Использование регулярных выражений регулярных выражений и рубинов для нахождения значений
- 27. Несколько матчей регулярных выражений в рамках других регулярных выражений
- 28. Усиление IP-адреса Проверка регулярных выражений - Рефакторинг регулярных выражений
- 29. Построение регулярных выражений с использованием ранее составленных регулярных выражений
- 30. XML-выражения регулярных выражений для регулярных выражений Java
Определите «первое предложение». – Rob
Достаточно хорошо для * what *? –