Как создавать определения переменных из фраз с помощью регулярных выражений (Notepad ++) - PullRequest
0 голосов
/ 18 февраля 2020

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

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

Пример

Ввод

"hello World"
"foo bAr"

Ожидаемый вывод

helloWorld = "hello World"
fooBar = "foo bAr"

Сценарий использования

Часто в своей работе мне предоставляют несколько констант, которые берутся из электронной таблицы Excel, и мне нужно определить для них группу переменных. Фразы содержат пробелы, но переменные не могут. Я обычно хотел бы, чтобы имена переменных были как можно ближе к фразам. Мне нужен способ сделать это навалом, без необходимости индивидуально вводить каждое имя переменной.

Примечания

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

1 Ответ

0 голосов
/ 18 февраля 2020

Я не нашел ни одного шага поиска / замены, который бы все сделал за вас, но мне удалось сделать это, используя последовательность регулярных выражений, применяемых один за другим. Первый извлекает содержимое для имени переменной и вставляет «=». Следующий делает основной тяжелый подъем и удаляет пробелы и применяет правильный кожух. Последний гарантирует, что все переменные начинаются со строчных букв. Применяйте их последовательно для достижения желаемого результата.

Regex # 1

Все, что мы здесь делаем, это извлекаем содержимое из кавычек и вставляем его в левую часть.

Примечание: здесь и ниже, мне нужно использовать этот символ для пробела, потому что SO не отображает его правильно: ␣. Поэтому замените это пробелом при использовании этого или других регулярных выражений в этом ответе.

Найти: "(.+)"

Заменить: ␣\1 = "\1" (обратите внимание на начальный пробел)

В нашем примере после этого шага мы получим:

hello World = "hello World"
foo bAr = "foo bAr"

Regex # 2

Здесь мы хотим сопоставить каждое слово слева, с целью удаления пробела и одновременной фиксации корпуса.

Найти: ␣(\S)(\S+)(?=.*=) (обратите внимание на начальный пробел)

Заменить: \u\1\L\2 (отсутствие пробела в шаблоне замены приводит к удалению пробела)

После этого шага мы получим:

HelloWorld = "hello World"
FooBar = "foo bAr"

Правильно , за исключением первой буквы каждого имени переменной.

Regex # 3

Исправляет начальные символы в нижнем регистре:

Найти: ^(.)

Заменить: \l\1

После этого шага наш вывод будет следующим:

helloWorld = "hello World"
fooBar = "foo bAr"

Необязательное регулярное выражение # 4 (Удалить Недопустимые символы)

Хотя в требовании принимались все буквы, часто это не так. Во-первых, вы можете захотеть ввести некоторые цифры. Во-вторых, могут быть ненужные скобки. В этом случае просто выполните поиск / замену с пустым выражением замены для следующего выражения поиска:

[^\w\r\n](?!=)(?=.*=)

То, что он делает, в первую очередь отрицательно соответствует чему-либо, что не является буквой, di git, знак подчеркивания или конец строки. Затем он гарантирует, что за соответствием следует = вниз по линии, но не сразу следует =, что означает пробел до =.

...