Преобразование значений ячеек в snake_case - PullRequest
1 голос
/ 18 марта 2019

У меня есть задача по очистке данных.У меня есть колонка, которая начинается с H6 и дальше от них.Столбец содержит данные, которые должны были быть в snake_case, но это не так.Значения ячейки имеют вид:

  • С регистром верблюда: "CamelCase"
  • С пробелами: "Значение интервала"
  • С некоторыми начальными заглавными буквами вызова: ALLCAPSPREFIX_rest
  • Сочетание выше

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

Я попробовал код VBA заменить пробелы символами подчеркивания и получить индекс подчеркивания.Теперь я думал сделать все символы сразу после подчеркивания строчными.Далее я собирался заменить последовательность из двух символов: сначала строчными, а затем прописными, скажем, от lC до l_c, поскольку я не хочу, чтобы CCC был преобразован в c_c_c, но в ccc.Но прежде чем двигаться дальше, я хочу знать, может ли быть более простой подход к этому.

1 Ответ

3 голосов
/ 18 марта 2019

Вот один метод, который может делать то, что вы хотите:

Option Explicit
Function Snake_case(s As String) As String
    Dim RE As Object
    Const sPat As String = "([A-Za-z0-9]+)(?=[ _A-Z])[ _]?(\S+)"
    Const sRepl As String = "$1_$2"
    Dim v As Variant

Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .ignorecase = False
    .Pattern = sPat
    v = Split(.Replace(s, sRepl), "_")
End With

v(0) = WorksheetFunction.Proper(v(0))
v(1) = LCase(v(1))
Snake_case = Join(v, "_")

End Function

enter image description here

А вот объяснение регулярного выражения и заменяющих строк:

Преобразование Snake_case

([A-Za-z0-9]+)(?=[ _A-Z])[ _]?(\S+)

Опции: чувствительны к регистру; ^ $ Матч на линии ломает

$ 1_ $ 2

Создано с помощью RegexBuddy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...