Регулярное выражение, чтобы найти строчную букву, а затем заглавную
У меня возникают трудности с использованием регулярного выражения (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
синтаксис в строке замены
Это правильный шаблон для определения строчных и прописных букв, однако вам нужно будет проверить соответствие, чтобы быть чувствительными к регистру в диалоге поиска / замены.