VB 从字符串中取两个某特定字符之间的字符串

时间:2023-01-03 11:15:47
假设有字符串a,长度未知;
字符串a 中有特定字符“&”,个数未知;
现需要提取第一个"&"和第二个"&”之间的字符!
求解!!!

30 个解决方案

#1


split(a,“&”)(2)
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。

#2


split(a,"&")(1),没睡好觉,数错了

#3


引用 2 楼 Runnerchin 的回复:
split(a,"&")(1),没睡好觉,数错了

VB 从字符串中取两个某特定字符之间的字符串
只要在字符串中有一个 & 字符就行了,不会报错。

用Spit来操作,比较简洁、方便。
但如果字符中较长、并且&字符比较多,用 Instr( )和Mid$( )这两个函数配合处理,运行效率高些。
不过如果“偶尔调用一次”,也关系不大。

#4



Public Function MidStr(ByVal Str As String, ByVal StartStr As String, ByVal EndStr As String, Optional ByVal Order As Integer = 0) As String
    Dim L As Long, R As Long
    L = InStr(Str, StartStr)
    If L = 0 Then Exit Function
    L = L + Len(StartStr)
    If Order = 0 Then
        R = InStr(L, Str, EndStr)
    Else
        R = InStrRev(Str, EndStr)
    End If
    If R < L Then Exit Function
    MidStr = Mid(Str, L, R - L)
End Function
'=================================
Str="AAA&BBB&CCC&DDD"
MidStr Str,"&","&"   '返回 BBB
MidStr Str,"&","&",1   '返回 BBB&CCC

#5


    Dim strData As String, strSubString() As String
    
    strData = "AAAA&myString&BBBBB"
    strSubString = Split(strData, "&")
    
    If UBound(strSubString) >= 1 Then
        Debug.Print strSubString(1)
    End If

#6


Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船

#7


引用 6 楼 zhao4zhong1 的回复:
Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船

VB 从字符串中取两个某特定字符之间的字符串
这个有什么问题?
这方面的“问题”我在3楼中已经说过了。

如果必须是“两个&”,那么只要把条件中的 >=1 改成 >=2就行了。
当然也可以用Instr( )函数来判断一下字符串中是否至少有2个 &字符、并用Mid$( )函数截取出字符串。

#8


马后炮

#9


Talk is cheap, show me the code!
VB 从字符串中取两个某特定字符之间的字符串

#10


万一第一个&和第二个&之间有4G个字符捏?!
不怕做不到;就怕想不到!!

各位领教了本ID“强词夺理”的优秀品质了吧。 VB 从字符串中取两个某特定字符之间的字符串

#11


引用 10 楼 zhao4zhong1 的回复:
万一第一个&和第二个&之间 有4G个字符捏?!
不怕做不到;就怕想不到!!

各位领教了本ID“强词夺理”的优秀品质了吧。 VB 从字符串中取两个某特定字符之间的字符串

你不仅是强词夺理,还是“信口开河”的高手!

VB6是32位程序,理论上“最大内存地址空间容量”就只有4GB;
然而这“4GB地址空间”中,高2GB段默认是“系统保留空间”,这时最多“2GB空间”了;
 即使通过更改配置参数,也最多能把“用户空间”扩展到3GB而已。
另外,“低64KB”是用户程序无法访问的,这样“理论极限可用地址空间容量”已经低于3GB了!
VB6中,每个字符要占用2字节,而“数据空间”最大范围还达不到3GB,算下来最多只能“1.5GB个字符”了,
  你如何给我整得出“4GB个字符”来!!!
VB 从字符串中取两个某特定字符之间的字符串

#12


VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

#13


引用 12 楼 zhao4zhong1 的回复:
VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

VB 从字符串中取两个某特定字符之间的字符串VB 从字符串中取两个某特定字符之间的字符串

#14


引用 12 楼 zhao4zhong1 的回复:
VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?

#15


引用 6 楼 zhao4zhong1 的回复:
Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船
这种情况应该看作符合需求。
楼主所说的第一个 & 可看作起始标志,第二个 & 可看作结束标志。
BBBBB 显然是在起始标志之后。如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。

#16


UBound是个抽风型函数,返回值是-1的时候,有时候能返回,有时候报错

#17


引用 14 楼 Runnerchin 的回复:
Quote: 引用 12 楼 zhao4zhong1 的回复:

VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?

我的代码不是纠正问题,是举出一个异常数据,暴露问题用的。

#18


“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug

#19


假设有字符串a,长度未知;(a必须有长度限制,比如2..1073741824)
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……

#20


一初学者问个问题,结果神仙打架

#21


VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

#22


边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


引用 21 楼 bakw 的回复:
VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

#23


引用 22 楼 zhao4zhong1 的回复:
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

#24


引用 18 楼 zhao4zhong1 的回复:
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug

如果将这样的串作为正常输入提交,那么有两种可能的协议许可:
1 对于最后的串,可以用串的结束标志来替代专用的结束字符,即最后的结束字符可省略。
2 如果将第二个 & 看作与后续无关内容的分隔符,当在存在后续无关内容时,它可以省略。

当然了,对于有强迫症的开发者,另当别论。他可以在输入时在最后加上这个无用的 &。

#25


引用 23 楼 Runnerchin 的回复:
Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

#26


引用 25 楼 zhao4zhong1 的回复:
Quote: 引用 23 楼 Runnerchin 的回复:

Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

好吧,你赢了。

#27


引用 25 楼 zhao4zhong1 的回复:
Quote: 引用 23 楼 Runnerchin 的回复:

Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

在VB6中,字符串就是字符串,哪管它什么“xx代码、xx转义”什么的!
当“传入”字符串内容是 &lt;&amp;bug&amp;&gt;的时候,
难道你就觉得楼主需要的一定就是 "bug",而不是  lt; 么!!!
VB 从字符串中取两个某特定字符之间的字符串

#28


总而言之,想写一段程序就满足未来无穷的需求变化,是不可能的。

#29


为毛要写万能代码,根据具体需求来不行么

#30



可能是我的问题描述不够准确 VB 从字符串中取两个某特定字符之间的字符串
我需要处理的字符串为  数字英文字母/ 、 -  、 & 混合的字符,长度也不会很长,所以"&"的数量 也不会太多!

最开始,我有用 类似 4 楼 bakw 的方法!!
但是我感觉代码不够简洁,
并且我的程序中 需要这样处理的地方只有一处,
故最后我采用了 2楼  Runnerchin 的方法!!

最后,还是非常感谢诸位的帮助! VB 从字符串中取两个某特定字符之间的字符串

#1


split(a,“&”)(2)
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。

#2


split(a,"&")(1),没睡好觉,数错了

#3


引用 2 楼 Runnerchin 的回复:
split(a,"&")(1),没睡好觉,数错了

VB 从字符串中取两个某特定字符之间的字符串
只要在字符串中有一个 & 字符就行了,不会报错。

用Spit来操作,比较简洁、方便。
但如果字符中较长、并且&字符比较多,用 Instr( )和Mid$( )这两个函数配合处理,运行效率高些。
不过如果“偶尔调用一次”,也关系不大。

#4



Public Function MidStr(ByVal Str As String, ByVal StartStr As String, ByVal EndStr As String, Optional ByVal Order As Integer = 0) As String
    Dim L As Long, R As Long
    L = InStr(Str, StartStr)
    If L = 0 Then Exit Function
    L = L + Len(StartStr)
    If Order = 0 Then
        R = InStr(L, Str, EndStr)
    Else
        R = InStrRev(Str, EndStr)
    End If
    If R < L Then Exit Function
    MidStr = Mid(Str, L, R - L)
End Function
'=================================
Str="AAA&BBB&CCC&DDD"
MidStr Str,"&","&"   '返回 BBB
MidStr Str,"&","&",1   '返回 BBB&CCC

#5


    Dim strData As String, strSubString() As String
    
    strData = "AAAA&myString&BBBBB"
    strSubString = Split(strData, "&")
    
    If UBound(strSubString) >= 1 Then
        Debug.Print strSubString(1)
    End If

#6


Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船

#7


引用 6 楼 zhao4zhong1 的回复:
Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船

VB 从字符串中取两个某特定字符之间的字符串
这个有什么问题?
这方面的“问题”我在3楼中已经说过了。

如果必须是“两个&”,那么只要把条件中的 >=1 改成 >=2就行了。
当然也可以用Instr( )函数来判断一下字符串中是否至少有2个 &字符、并用Mid$( )函数截取出字符串。

#8


马后炮

#9


Talk is cheap, show me the code!
VB 从字符串中取两个某特定字符之间的字符串

#10


万一第一个&和第二个&之间有4G个字符捏?!
不怕做不到;就怕想不到!!

各位领教了本ID“强词夺理”的优秀品质了吧。 VB 从字符串中取两个某特定字符之间的字符串

#11


引用 10 楼 zhao4zhong1 的回复:
万一第一个&和第二个&之间 有4G个字符捏?!
不怕做不到;就怕想不到!!

各位领教了本ID“强词夺理”的优秀品质了吧。 VB 从字符串中取两个某特定字符之间的字符串

你不仅是强词夺理,还是“信口开河”的高手!

VB6是32位程序,理论上“最大内存地址空间容量”就只有4GB;
然而这“4GB地址空间”中,高2GB段默认是“系统保留空间”,这时最多“2GB空间”了;
 即使通过更改配置参数,也最多能把“用户空间”扩展到3GB而已。
另外,“低64KB”是用户程序无法访问的,这样“理论极限可用地址空间容量”已经低于3GB了!
VB6中,每个字符要占用2字节,而“数据空间”最大范围还达不到3GB,算下来最多只能“1.5GB个字符”了,
  你如何给我整得出“4GB个字符”来!!!
VB 从字符串中取两个某特定字符之间的字符串

#12


VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

#13


引用 12 楼 zhao4zhong1 的回复:
VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

VB 从字符串中取两个某特定字符之间的字符串VB 从字符串中取两个某特定字符之间的字符串

#14


引用 12 楼 zhao4zhong1 的回复:
VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?

#15


引用 6 楼 zhao4zhong1 的回复:
Dim strData As String, strSubString() As String
     
    strData = "&BBBBB"
    strSubString = Split(strData, "&")
     
    If UBound(strSubString) >= 1 Then
        Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
    End If

小心驶得万年船
这种情况应该看作符合需求。
楼主所说的第一个 & 可看作起始标志,第二个 & 可看作结束标志。
BBBBB 显然是在起始标志之后。如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。

#16


UBound是个抽风型函数,返回值是-1的时候,有时候能返回,有时候报错

#17


引用 14 楼 Runnerchin 的回复:
Quote: 引用 12 楼 zhao4zhong1 的回复:

VB 从字符串中取两个某特定字符之间的字符串边界条件不是每个人都能想全的。

但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?

我的代码不是纠正问题,是举出一个异常数据,暴露问题用的。

#18


“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug

#19


假设有字符串a,长度未知;(a必须有长度限制,比如2..1073741824)
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……

#20


一初学者问个问题,结果神仙打架

#21


VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

#22


边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


引用 21 楼 bakw 的回复:
VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

#23


引用 22 楼 zhao4zhong1 的回复:
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

#24


引用 18 楼 zhao4zhong1 的回复:
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug

如果将这样的串作为正常输入提交,那么有两种可能的协议许可:
1 对于最后的串,可以用串的结束标志来替代专用的结束字符,即最后的结束字符可省略。
2 如果将第二个 & 看作与后续无关内容的分隔符,当在存在后续无关内容时,它可以省略。

当然了,对于有强迫症的开发者,另当别论。他可以在输入时在最后加上这个无用的 &。

#25


引用 23 楼 Runnerchin 的回复:
Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

#26


引用 25 楼 zhao4zhong1 的回复:
Quote: 引用 23 楼 Runnerchin 的回复:

Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

好吧,你赢了。

#27


引用 25 楼 zhao4zhong1 的回复:
Quote: 引用 23 楼 Runnerchin 的回复:

Quote: 引用 22 楼 zhao4zhong1 的回复:

边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t


Quote: 引用 21 楼 bakw 的回复:

VB 从字符串中取两个某特定字符之间的字符串
我的标准答案都被无视了

万一字符串不是unicode编码,你的“标答”估计也有bug

Talk is cheap.

比如HTML编码字符串:&lt;&amp;bug&amp;&gt;

在VB6中,字符串就是字符串,哪管它什么“xx代码、xx转义”什么的!
当“传入”字符串内容是 &lt;&amp;bug&amp;&gt;的时候,
难道你就觉得楼主需要的一定就是 "bug",而不是  lt; 么!!!
VB 从字符串中取两个某特定字符之间的字符串

#28


总而言之,想写一段程序就满足未来无穷的需求变化,是不可能的。

#29


为毛要写万能代码,根据具体需求来不行么

#30



可能是我的问题描述不够准确 VB 从字符串中取两个某特定字符之间的字符串
我需要处理的字符串为  数字英文字母/ 、 -  、 & 混合的字符,长度也不会很长,所以"&"的数量 也不会太多!

最开始,我有用 类似 4 楼 bakw 的方法!!
但是我感觉代码不够简洁,
并且我的程序中 需要这样处理的地方只有一处,
故最后我采用了 2楼  Runnerchin 的方法!!

最后,还是非常感谢诸位的帮助! VB 从字符串中取两个某特定字符之间的字符串