字符串替换。 看似简单。就是搞不定。 救小弟我

字符串替换。。 看似简单。。就是搞不定。 救我
....@A@.....@B@.....@C@.....

....的意思就是任何内容,可能跟 A B C 的内容重复

现在的问题是 我想把 A换成 X B换成Y C 换成Z

1.如果用REPLACE 函数 会出现如下问题: 比如 如果A=B=C 那就会把A 和 B C 都换成X 而我只想把A换成X 同样...中可能存在和A一样的字符

2.A 两边的@ 我可以确定位置, 如果用MID 替换的话,又会出现下面的问题:
比如 我已经知道A前面@的位置是5 后面@的位置是8
如果A=10 X=9 那A得第一个字母位置是6, 即....@10@.....@B@.....@C@.....
str....@A@.....@B@.....@C@....."  

mid(str,6,2)=9

那会出现的结果是 str 是 ....@90@.....@B@.....@C@..... 也就是说只把1换成了9 而没把0删掉。。

3.如果用split 分组
我刚才也提到过 中间的...可能是任意字符 同样可能是@或者是A, 所以就无法判定A在数组的位置了。

简单点说。 我已经能定位我想替换的A的前面的字符和后面的字符的位置(A可以是字符或字符串), 我想把A换成X(X可以是字符或字符串) 但是不要把前面和后面的字符串中和A相同的字符同时替换掉

各位老大要是头疼的话 ,就这样吧
.10..@10@.....@10@.....@8@..@10@... 就是这个字符串, 我想得到
.10..@10@.....@X@.....@8@..@10@... X可以是1个字符 可以是个字符串 就是把第2个@10@ 中的10 换成我想要的字符串变量  

头疼。。。

------解决方案--------------------
VB code

Private Sub Command1_Click()
    '.10..@10@.....@10@.....@8@..@10@... 就是这个字符串, 我想得到
    '.10..@10@.....@X@.....@8@..@10@... X可以是1个字符 可以是个字符串 就是把第2个@10@ 中的10 换成我想要的字符串变量
    
    Dim tmpStr As String, resultStr As String
    Dim i As Integer, wz As Integer
    Dim iStart As Integer, iEnd As Integer
    
    tmpStr = ".10..@10@.....@10@.....@8@..@10@..."
    For i = 1 To 4
        wz = InStr(wz + 1, tmpStr, "@")
        If i = 3 Then
           iStart = wz
        ElseIf i = 4 Then
           iEnd = wz
        End If
    Next
    resultStr = Mid(tmpStr, 1, iStart) & "X" & Mid(tmpStr, iEnd)

End Sub

------解决方案--------------------
探讨
各位老大,我还是把整个的字符串贴出来
135:10:hx0183a40:1627207:28320;21921:28389;135:10:hx0183a41:1627207:28320;21921:28390;135:10:hx0183a42:1627207:28320;这就是 原来的字符串。 可以看到 :hx0183a40 hx0183a41 hx0183a42 这些是唯一的ID, 比如第一组……

------解决方案--------------------
VB code
Private Sub Form_Load()
    Dim strData$
    Dim reg As Object
    
    strData = "135:10:hx0183a40:1627207:28320;21921:28389;135:10:hx0183a41:1627207:28320;21921:28390;135:10:hx0183a42:1"
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True
    reg.IgnoreCase = True
    reg.Pattern = ":(.*?):hx0183a40"
    Debug.Print reg.Replace(strData, ":100:hx0183a40")
End Sub