В Notepad ++ есть ли регулярное выражение, способное взять то, что справа от «::», и переместить его слева от «::», но без апострофа? - PullRequest
1 голос
/ 09 марта 2020

Итак, вкратце, у меня есть текстовый файл, содержащий несколько сокращений на английском языке sh, 3 из которых приведены ниже, и один, который был сделан до того, как я понял, насколько трудным это будет для 80 строк.

::I'd've
::I'll
::ain't
dont::don't

Обычно я использую RegEx для модификации большинства моих текстовых файлов с помощью n ++, но в этом сценарии этого нет По сути, я хотел взять то, что справа от ::, переместить его влево от :: и убрать апострофы ', игнорируя уже сделанные.

Idve::I'd've
Ill::I'll
aint::ain't
dont::don't

Я все еще на ранних стадиях изучения / использования регулярных выражений, и я едва компетентен в любом программировании за пределами AutoHotkey, если вы назовете это реальным программированием (по крайней мере на моем уровне). Может ли regex + notepad ++ выполнить этот запрос или я хочу использовать что-то вроде Python или Bash для изменения текстового файла?

^[^:]*$ - это единственное регулярное выражение, которое я использовал, и я обнаружил, что один онлайн, так как я не мог понять, как решить проблему для NOT : (чтобы добавить :: в начало строки), но наткнулся там на применение его только к тем строкам, которые уже не содержат :: .

Спасибо!

1 Ответ

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

Если вы знаете ограничение на количество апострофов в каждой строке, вы можете создать регулярное выражение, которое будет соответствовать :: в начале строки, а затем любое количество символов, кроме символов перевода строки, : и ', записанные в группу, а затем ', и повторите этот подшаблон в последовательности необязательных групп без захвата. Затем замените обратными ссылками на группы. Синтаксис $nn может содержать до 99 групп.

Вот регулярное выражение, поддерживающее до 9 апострофов на строку:

^::([^:\r\n']+)'(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?(?:([^:\r\n']+)')?([^:\r\n']+)?

Заменить на $1$2$3$4$5$6$7$8$9$0.

enter image description here

Подробности

  • ^ - начало строки
  • :: - :: строка
  • ([^:\r\n']+)' - Группа 1 ($1): один или несколько символов, отличных от :, CR, LF, ', затем символ '
  • (?:([^:\r\n']+)')? - необязательное сопоставление группы без захвата
    • ([^:\r\n']+)' - Группа 2 ($2): один или несколько символов, отличных от :, CR, LF , '
    • ' - a '
  • (?:([^:\r\n']+)')? - группа 3 ($3) в необязательной группе без захвата
  • (?:([^:\r\n']+)')? - группа 4 ($4) в необязательной группе без захвата
  • (?:([^:\r\n']+)')? - группа 5 ($5) в необязательной группе без захвата
  • (?:([^:\r\n']+)')? - группа 6 ($6) в необязательной группе без захвата
  • (?:([^:\r\n']+)')? - группа 7 ($7) в необязательной группе без захвата
  • (?:([^:\r\n']+)')? - группа 8 ($8) в необязательной группе без захвата
  • ([^:\r\n']+)? - необязательная группа захвата 9 ($9): один или несколько символов, отличных от :, CR, LF, '.

Обратите внимание, что $0 относится ко всему значению совпадения.

...