Access VBA实现特定格式字符串的顺序反转问题
解决字符串列表反转问题的实用方案
嗨,我来给你几个靠谱的方法解决这个问题~你之前用StrReverse踩坑是因为它会反转整个字符串的每个字符顺序,而不是你需要的“反转项的排列顺序”,换个思路拆分重组就好啦。
方法一:拆分-反转-拼接(最简单高效)
这个方法完美适配你的场景——所有项的前缀都是统一的12345-,直接按分隔符拆分字符串为数组,反转数组后再拼接回去就行:
Dim originalStr As String Dim reversedStr As String Dim parts() As String originalStr = "12345-5, 12345-4, 12345-3, 12345-2, 12345-1" ' 按", "拆分字符串为数组 parts = Split(originalStr, ", ") ' 手动反转数组(VBA没有内置的数组反转函数) Dim i As Integer, temp As String For i = 0 To UBound(parts) \ 2 temp = parts(i) parts(i) = parts(UBound(parts) - i) parts(UBound(parts) - i) = temp Next i ' 重新拼接成目标字符串 reversedStr = Join(parts, ", ")
运行后reversedStr就是你要的"12345-1, 12345-2, 12345-3, 12345-4, 12345-5",完全符合需求。
方法二:正则提取数字反转(更灵活)
如果以后你的前缀可能不统一(比如出现12345-、67890-混合的情况),可以用正则提取每个项的前缀和后缀数字,单独反转后缀数组后再拼接:
Dim regex As Object Set regex = CreateObject("VBScript.RegExp") regex.Pattern = "(\d+)-(\d+)" ' 匹配前缀数字和后缀数字 regex.Global = True Dim originalStr As String originalStr = "12345-5, 12345-4, 12345-3, 12345-2, 12345-1" Dim matches As Object Set matches = regex.Execute(originalStr) ' 收集所有后缀数字 Dim nums() As String ReDim nums(matches.Count - 1) Dim j As Integer For j = 0 To matches.Count - 1 nums(j) = matches(j).SubMatches(1) Next j ' 反转后缀数字数组 Dim i As Integer, temp As String For i = 0 To UBound(nums) \ 2 temp = nums(i) nums(i) = nums(UBound(nums) - i) nums(UBound(nums) - i) = temp Next i ' 拼接成新字符串 Dim reversedStr As String reversedStr = "" For j = 0 To UBound(nums) If j > 0 Then reversedStr = reversedStr & ", " reversedStr = reversedStr & matches(j).SubMatches(0) & "-" & nums(j) Next j
这个方法扩展性更强,即使每个项的前缀不同,也能保证后缀数字的顺序反转后正确拼接。
总结一下:如果你的场景前缀固定,方法一绝对是最优解,代码少、效率高;如果需要应对更复杂的情况,方法二更灵活。
内容的提问来源于stack exchange,提问作者Charlie West
相关产品推荐
相关产品推荐

