ani*_*nir 2 regex string excel vba
我有一些数据清理任务。我有一个从 H6 开始并进一步向下的列。该列包含的数据应该在snake_case 中,但事实并非如此。单元格值的格式为:
我知道没有具体的算法将这一切带到snake_case,但我想提出至少将大多数单元格带到snake_case的代码。
我尝试用 VBA 代码用下划线替换空格并获取下划线的索引。现在我正在考虑将下划线后的所有字符设为小写。此外,我正在考虑替换两个字符的序列:第一个小写,下一个大写,说lCtol_c因为我不想CCC转换为c_c_c,而是转换为ccc. 但在继续之前,我想知道是否有更简单的方法来解决这个问题。
这是一种可以满足您要求的方法:
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
Run Code Online (Sandbox Code Playgroud)
这是对正则表达式和替换字符串的解释:
([A-Za-z0-9]+)(?=[ _A-Z])[ _]?(\S+)
Run Code Online (Sandbox Code Playgroud)
选项:区分大小写;^$ 匹配换行符
([A-Za-z0-9]+)
[A-Za-z0-9]+
+A-Za-z0-9(?=[ _A-Z])
[ _A-Z]
_A-Z[ _]?
(\S+)
$1_$2
使用RegexBuddy创建