如何 parse/split 从右到左第二个特定字符?

How do I parse/split the second specific character from the right to left?

我有这样的字符串:

sometexthere_moretext_moretext_12512512521_251125512125

或:

sometexthere_moretext_12512512521_251125512125

在任何一种情况下,我都需要像这样解析两种情况:

var1 = sometexthere_moretext_moretext_ var2 = 12512512521_251125512125

var1 = sometexthere_moretext_ var2 = 12512512521_251125512125

所以我试图找到如何 parse/split 从右到左的第二个“_”。任何帮助将不胜感激。

Dim variable As String
variable = sometexthere_moretext_moretext_12512512521_251125512125

Dim StringArray() As String
StringArray() = Split(variable, "_")


For i = 0 To UBound(StringArray)
    MsgBox Trim$(StringArray(i))
Next

你很接近,UBound(StringArray) 将 return 4 在这个例子中,所以你想从索引 3 开始:

Dim variable As String
variable = "sometexthere_moretext_moretext_12512512521_251125512125"

Dim StringArray() As String
StringArray() = Split(variable, "_")

Dim var1 As String
Dim var2 As String

' Build var1
var1 = ""
For i = 0 To (UBound(StringArray) - 2)
    If var1 <> "" Then var1 = var1 & "_"
    var1 = var1 & Trim$(StringArray(i))
Next

' Build var2
var2 = ""
For i = (UBound(StringArray) - 1) To UBound(StringArray)
    If var2 <> "" Then var2 = var2 & "_"
    var2 = var2 & Trim$(StringArray(i))
Next

MsgBox "var1: " & var1 & vbCrLf & "var2: " & var2

使用此代码,无论数字前面有多少字段,您都只会得到数字。

另一种方式,使用 instrRev :

Dim leftPart as string, rightPart as String, var1 as string
var1 = "sometexthere_moretext_moretext_12512512521_251125512125"
If UBound(Split(var1, "_")) >= 2 Then 'Assuming you have at least 2 "_" in var1
    leftPart = Left(var1, InstrRev(Left(var1, instrRev(var1, "_") - 1), "_") - 1)
    rightPart = Mid(var1, InstrRev(Left(var1, instrRev(var1, "_") - 1), "_") + 1)
Endif