2

(Это ответ на вопрос, который я задавал ранее.)

Я пытаюсь разработать RegEx для LibreOffice Writer, который находит все сокращения в моей диссертации. В настоящее время у меня есть следующее:

\b(?:[A-Z]){2,}

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

CoE RoR RoC

В идеале я хотел бы, чтобы RegEx идентифицировал все слова как минимум с двумя заглавными буквами, хотя они не должны быть в начале слова. Но я в растерянности, пытаясь создать его. Может кто-то указать мне верное направление?

2 ответа2

3

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

\b(?:[A-Z][a-z]*){2,}

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

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

\b(?:[a-z]*[A-Z][a-z]*){2,}

Оба из них были проверены на тестовый текст Джима. (спасибо, Джим!)

2

Это выражение не находит все возможности, но оно должно найти те, которые вы ищете:

\b(?:[A-Z]{2}[:alpha:]*)|(?:[A-Z][a-z][A-Z][:alpha:]*)

Итак, для этого текста:

EULEX CFSP OJ CAbc cAB cAb cab Cab CabC CFSP OJ CFSP OJ EULEX EULEX EU EU
CoE RoR RoC

Он находит все слова, кроме cAB cAb cab Cab CabC , которые, как я полагаю, не должны рассматриваться как сокращения.

Разбивка выражения:

  • \b - граница слова.
  • (?:[A-Z]{2}[:alpha:]*) принимает все слова, начинающиеся с двух заглавных букв.
    • [:alpha:]* соответствует остальной части слова, принимая любые буквы, как верхние, так и нижние.
  • | "или" пробует следующее выражение, если первое не совпадает.
  • (?:[A-Z][a-z][A-Z][:alpha:]*) принимает все слова, начинающиеся с верхнего, нижнего, верхнего.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .