regex - 连接字符串并删除多余的逗号
问题描述
我正在尝试连接多个字符串并用逗号分隔它们,然后删除多余的、前导和尾随的逗号。
例如,输入TEST("", "b", "c", "", "")
,我想得到
b, c
但是,我的正则表达式,$| ,+|^,
并没有真正考虑到重复的逗号:
Function TEST(a, b, c, d, e)
res = a & ", " & b & ", " & c & ", " & d & ", " & e
Debug.Print (res)
Dim regex As Object, str, result As String
Set regex = CreateObject("VBScript.RegExp")
With regex
.Pattern = ",$| ,+|^,"
End With
Dim ReplacePattern As String
ReplacePattern = ""
res = regex.Replace(res, ReplacePattern)
TEST = res
End Function
我怎样才能做到这一点?
解决方案
最优雅的是@ScottCraner 的建议(如果他希望将其发布为他自己的,将删除这部分答案)TEXTJOIN
Private Function nonEmptyFields(ParamArray strings() As Variant) As String
nonEmptyFields = WorksheetFunction.TextJoin(",", True, Array(strings))
End Function
注意:这仅适用于 Office 365+,但您始终可以创建自己的版本
TEXTJOIN
另一种选择是遍历ParamArray
字符串并将它们添加在一起,具体取决于它们的内容(它们是填充的还是空的)
Private Function nonEmptyFields(ParamArray strings() As Variant) As String
Dim result As String
Dim i As Byte
For i = LBound(strings) To UBound(strings)
If Len(strings(i)) <> 0 Then
If result = vbNullString Then
result = strings(i)
Else
result = result & "," & strings(i)
End If
End If
Next i
nonEmptyFields = result
End Function
两者都将产生所需的结果与设置
Debug.Print nonEmptyFields(a, b, c, d, e, f) ' "", "b", "c", "", "", ""
推荐阅读
- html - 如何创建一个 Angular 2+ *ngFor 填充表,每个单元格都有一条记录?
- javascript - 添加对将文本转换为 html 的支持
- hadoop - 从 hbase shell 调用 java 方法
- arrays - 在 Typescript 中使用 push 函数之前过滤对象数组
- nginx - 具有私有 IP 的 Kubernetes 入口控制器
- python - 为什么我的 python 2.7 代码中出现此字符串错误
- python - 将 Pandas 日期时间列(带时间戳)设置为仅显示凌晨 3 点之前的行
- java - Elasticsearch Springboot 集成测试
- vba - Excel - 从不同工作表和超链接上的单元格中提取数据
- sql - SQL 查询 - 仅拉回日期