Выберите только заглавное предложение - PullRequest
0 голосов
/ 02 марта 2020

Это действительно глупо, но я не могу извлечь предложения, которые состоят из букв в верхнем регистре.

Это пример моего текста:

NÁLADA.
Na všech stromech visí stíny.
Vítr žaluje v trávě
To je štěstí mého srdce.
NOVÉ JARO A MY.
Tančí víly při měsíci v smaragdových zahradách, skvosty v kšticích, úsměv v líci tančí v světle, tančí v tmách.
PRÁCE
které spaly staletí, tančí atlasové víly v nyvém sadě zakletí.
RESIGNACE.
skvosty v kšticích, úsměv

Если вы хотите захватить:

NÁLADA.
NOVÉ JARO A MY.
PRACE
RESIGNACE.

Я пробовал несколько регулярных выражений, но всегда есть какая-то проблема:

[\w\s]+
[[A-Ž]+\s]+

1 Ответ

0 голосов
/ 02 марта 2020

Предполагая, что ваш движок регулярных выражений (Sublime) поддерживает именованные классы POSIX, вы можете использовать

^[^[:lower:]]+$

Это просто ищет строку, содержащую 1 или символы, если ни одна из них не является строчными буквами.

(далее объяснение в Regex101 )

Вы просили "предложения", а не строки. Это немного больше усилий:

(?<=^|[.?!]\s)[^[:lower:].?!]+(?:[.?!]|$)

Это ищет конец предложения (означая, что завершающие предложение символы, такие как точка, знак вопроса и восклицательный знак, не могут быть сопоставлены до конца, поэтому более длинный отрицается класс персонажей). В дополнение к сопоставлению якорей в начале и конце строки, это принимает предыдущий текст, который закончил предложение и конец предложения. Это делается путем поиска правильной пунктуации. Осмотр за спиной должен быть фиксированной ширины, поэтому я предполагаю, что после пунктуации должен быть один пробел (если после точки / вопроса / восклицания есть дополнительные пробелы, они будут просто частью совпадения).

Если в предложении есть пунктуация, заканчивающаяся предложением (например, «КУПИТЬ НА EXAMPLE.COM (ПОЖАЛУЙСТА!! ЕСЛИ ВАМ НРАВИТСЯ ЭТО.»), То это будет пропущено (будет соответствовать «КУПИТЬ НА ПРИМЕРЕ». ЭТО. ", Но это будет скучать по остальным). Существуют сложные способы обойти использование Lookaheads, но я понятия не имею, будут ли они (или вообще что-то из этого) работать в движке регулярных выражений Sublime.

(дальнейшее объяснение в Regex101 )

...