Рубрики
Без рубрики

Чехол змеи к корпусу верблюда и обратно с использованием регулярных выражений и Python

Преобразовать обратно между змеей и корпусом верблюда с помощью Python и Re Module. Теги с Python, Regex, программированием, веселым.

Снейк чехол и Чехол верблюда Соглашения о именованных переменных, функциях и классах. Большинство команд и проектов предписывают конкретное дело в их стилях.

Примеры корпуса верблюда:

MyClass
MyClassFactory
MyClassFactoryBuilder
MyClassFactoryBuilderImpl
myInstance
myInstance2
abc
patternMatcher

Примеры случаи змеи:

add
matrix_add
diagonal_matrix_add
pseudo_inverse

Если мы хотим преобразовать взад-вперед между этими случаями, мы должны искать интересные точки – границы слова. Границы случая верблюда имеют первую букву, заглавную, в то время как границы слова со змеями имеют _ Отказ

Снейк чехол в корпус верблюда

Вот регулярное выражение для выяснения _ И первая буква в следующем слове:

(.*?)_([a-zA-Z])

Это Regex имеет 2 части:

  1. (. *?) Находит все до _ Отказ

    • ‘.’ означает любой характер.
    • ‘*’ означает соответствие 0 или более экземпляры
    • ‘? Стенды для не жадного матча. Мы должны использовать? В шаблоне, потому что двигатель Regex по умолчанию будет пытаться соответствовать максимальному соответствию. Итак, если мы используем только (. *) Все слово будет потребляться, и ничего не останется на остальной части шаблона.
    • ‘()’ ” STAGE для группы. Группа – это способ сохранения части матча на потом.
    • Вместе они означают, что находят все персонажи до первого «_» и захватывают их в группе.
  2. ([A-ZA-Z]) Находит первый алфавит после _ Отказ Нам нужно это преобразовать в верхний регистр для корпуса верблюда.

Код Python ниже преобразует слова, которые находятся в корпусе змеи в корпус верблюда:

import re

REG = r"(.*?)_([a-zA-Z])"

def camel(match):
    return match.group(1) + match.group(2).upper()

def camel_upper(match):
    return match.group(1)[0].upper() + match.group(1)[1:] + match.group(2).upper()

words = """add
matrix_add
diagonal_matrix_add
pseudo_inverse""".splitlines()

results = [re.sub(REG, camel, w, 0) for w in words]
print(results)
# Output:
# ['add', 'matrixAdd', 'diagonalMatrixAdd', 'pseudoInverse']

Мы используем Regex, которое мы построили ранее и Re.sub метод заменить наши подобранные слова. Мы проходим метод под названием верблюд как аргумент. Этот метод позволяет нам изменить случай буквы во второй группе и сохранить первую группу без изменений. Обратите внимание, что первое письмо может быть ниже, либо верхнее, в зависимости от того, является ли это переменную или метод (ниже) или класс (верхний). Camel_Upper Метод можно использовать для названий классов.

Чехол верблюда к чему змеи

Аналогичным образом, для преобразования из верблюда на корпус змеи, Regex:

(.+?)([A-Z])

И код Python:

import re

REG = r"(.+?)([A-Z])"

def snake(match):
    return match.group(1).lower() + "_" + match.group(2).lower()

words = """MyClass
MyClassFactory
MyClassFactoryBuilder
MyClassFactoryBuilderImpl
myInstance
myInstance2
abc
patternMatcher""".splitlines()

results = [re.sub(REG, snake, w, 0) for w in words]

print(results)
# Output
# ['my_class', 'my_class_factory', 'my_class_factory_builder', 'my_class_factory_builder_impl', 'my_instance', 'my_instance2', 'abc', 'pattern_matcher']

Оригинал: “https://dev.to/rrampage/snake-case-to-camel-case-and-back-using-regular-expressions-and-python-m9j”