我有一些数据清理任务。我有一栏从H6开始,然后从他们开始。该列包含本应在snake_case中的数据,但事实并非如此。单元格值的形式为:
我知道没有具体的算法可以将所有这些都带到snake_case,但是我想拿出至少将大多数单元带到snake_case的代码。
我尝试使用VBA代码用下划线替换空格并获取下划线索引。现在我正在考虑将所有字符都放在下划线之后,使其小写。此外,我还在考虑替换两个字符的序列:第一个小写字母和第二个大写字母,将 <ClaimKey>str1234</ClaimKey>
<VehicleRegistrationNo>str1234</VehicleRegistrationNo>
转换为lC
,因为我不希望l_c
转换为CCC
,而是c_c_c
。但是在继续之前,我想知道是否可以有更简单的方法。
答案 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
这是正则表达式和替换字符串的说明:
([A-Za-z0-9]+)(?=[ _A-Z])[ _]?(\S+)
选项:区分大小写; ^ $匹配行间的中断
([A-Za-z0-9]+)
[A-Za-z0-9]+
(?=[ _A-Z])
[ _]?
(\S+)
$ 1_ $ 2
$1
_
$2
由RegexBuddy创建