首页 > 解决方案 > 将单元格值转换为snake_case

问题描述

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

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

我尝试使用 VBA 代码用下划线替换空格并获取下划线的索引。现在我想把下划线后面的所有字符都变成小写。此外,我正在考虑替换两个字符的序列:第一个小写字母和下一个大写字母,比如我lC不想转换为. 但在更进一步之前,我想知道是否有更简单的方法来解决这个问题。l_cCCCc_c_cccc

标签: regexexcelvbastring

解决方案


这是一种可以满足您要求的方法:

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

在此处输入图像描述

这是正则表达式和替换字符串的解释:

Snake_case 转换

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

选项:区分大小写;^$ 匹配换行符

$1_$2

使用RegexBuddy创建


推荐阅读