Регулярное выражение, чтобы найти строчную букву, а затем заглавную

У меня возникают трудности с использованием регулярного выражения (Grep) в TextWrangler, чтобы найти вхождения строчные буквы, а затем прописные. Например:

Это объявление означает, что студенты приветствуются.

На самом деле, я хочу разделить вхождение, добавив двоеточие, чтобы оно стало означать: Студенты

Я пытался:

[a-z][A-Z]

Но это выражение не работает в TextWrangler.

*РЕДАКТИРОВАТЬ: вот точные контексты, в которых появляются вхождения (я имею в виду только с этими цветами шрифта). *

<font color =#48B700>  - Stột jlăm wẻ baOne hundred and three<br></font>

<font color =#C0C0C0>     »» Qzống pguộc lyời ba yghìm fảy dyổiTo live a life full of vicissitudes, to live a life marked by ups and downs<br></font>

"baOne" and "dyổiTo" must be "ba: One" and "dyổi: To" 

Кто-нибудь может помочь? Большое спасибо.

4 ответа

Решение

Я действительно считаю (не имея TextWrangler под рукой, хотя), что вам нужно искать ([a-z])([A-Z]) и заменить его на: \1: \2

Надеюсь это поможет.

Этот вопрос давным-давно, но я наткнулся на него, так что, возможно, кто-то еще. Комментарий ОП к ответу Игоря прояснил, как задача должна была быть описана (и могла быть добавлена ​​к описанию).

Чтобы соответствовать только те строки шрифта HTML заменить

(?<=<font color =#(?:48B700|C0C0C0)>)(.*?[a-z])([A-Z])

с \1: \2

Объяснение:

  • (?<=[fixed-length regex]) является положительным взглядом сзади и означает "если мой матч имеет это прямо перед ним"
  • (?:48B700|C0C0C0) является неназванной группой, которая соответствует только 2 цветам. Поскольку они имеют одинаковую длину, они работают в виде сзади (это должно быть фиксированной длины)
  • (.*?[a-z])([A-Z]) будет соответствовать всему после > из них начинаются теги шрифта до ваших заглавных букв.
  • \1: \2 замена такая же, как в ответе Игоря, только то, что \1 будет соответствовать всей первой строке, которая нуждается в разделении.

Дополнение:

Ваши входные строки содержат специальные символы, и часть, которую вы хотите разделить, вполне может закончиться одним. В этом случае они не будут пойманы [a-z] в одиночестве. Вам нужно будет добавить символьный рейнджер, который фиксирует все буквы, которые вам нужны, что-то вроде

(?<=<font color =#(?:48B700|C0C0C0)>)(.*?[a-zḁ-ῼ])([A-Z])

Замещать ([a-z])([A-Z]) с \1:\2 - У меня нет TextWrangler, но он работает на Notepad++

Скобки предназначены для сбора данных, которые относятся к использованию \1 синтаксис в строке замены

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

Другие вопросы по тегам