将单元格值转换为snake_case

时间:2019-03-18 12:17:51

标签: regex excel vba string

我有一些数据清理任务。我有一栏从H6开始,然后从他们开始。该列包含本应在snake_case中的数据,但事实并非如此。单元格值的形式为:

  • 骆驼保护套:“ CamelCase”
  • 带空格:“空格值”
  • 具有一些初始通话上限:ALLCAPSPREFIX_rest
  • 上述组合

我知道没有具体的算法可以将所有这些都带到snake_case,但是我想拿出至少将大多数单元带到snake_case的代码。

我尝试使用VBA代码用下划线替换空格并获取下划线索引。现在我正在考虑将所有字符都放在下划线之后,使其小写。此外,我还在考虑替换两个字符的序列:第一个小写字母和第二个大写字母,将 <ClaimKey>str1234</ClaimKey> <VehicleRegistrationNo>str1234</VehicleRegistrationNo> 转换为lC,因为我不希望l_c转换为CCC,而是c_c_c。但是在继续之前,我想知道是否可以有更简单的方法。

1 个答案:

答案 0 :(得分:3)

这是一种可以完成您想要的事情的方法:

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创建