请教关于字符串操作问题

adamcannibal 2007-10-14 12:58:37
有一组字符串,每8个字母和数字为一组,中间用逗号,横线,或者空格等非字母和数字连接,例如:
abc1234,dsss12cm,1223dddd AAAA1111

需要将每组字符串的最后一位提取出来,得到用逗号分割的新的字符串,(上面这些字符提取后应该是“4,m,d,1"),应该怎样做啊?可以用正则表达式吗?
...全文
183 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2007-10-15
  • 打赏
  • 举报
回复
引用“Microsoft VBScript Regular Expressions 5.5”
「已注销」 2007-10-15
  • 打赏
  • 举报
回复
引用的是什么啊.
awperpvip 2007-10-15
  • 打赏
  • 举报
回复
学习,加个引用,楼上的代码真的有用啊
vbman2003 2007-10-15
  • 打赏
  • 举报
回复
方法应该有许多,比如正则:

Function StrReplace(s As String, p As String, r As String) As String
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = p
StrReplace = CStr(re.Replace(s, r))
End Function

Private Sub Command1_Click()

Dim p As String
Dim s As String

s = "aabc1234,dsss12cm 1223dddd.AAAA1111 '''ffgfhjkl"
p = "[A-Za-z0-9]{7}"
s = StrReplace(s, p, "")
p = "[^A-Za-z0-9]+"
s = StrReplace(s, p, ",")
Debug.Print s

End Sub
adamcannibal 2007-10-14
  • 打赏
  • 举报
回复
谢谢chenjl1031 ,谢谢各位。
东方之珠 2007-10-14
  • 打赏
  • 举报
回复
每组数有8位字母和数字,中间隔的是什么东西,不知道?中间隔了几个,也不知道?这样办:用扫描的方式。

dim str as string '类似aabc1234,dsss12cm 1223dddd..AAAA1111'''ffgfhjkl的字符串(不能超过256个)
dim s as string,Mystr as string
dim i as integer
str="aabc1234,dsss12cm 1223dddd..AAAA1111'''ffgfhjkl"

’判断是否为字母的函数
Private Function IsLeter(c As String) As Boolean
Dim asci As Byte
IsLeter = False
asci = Asc(c)
If (asci >= Asc("A") And asci <= Asc("Z")) Or (asci >= Asc("a") And asci <= Asc("z")) Then
IsLeter=true
End Function


'将中间的所有数字和字母取出来形成新的字符串:Mystr=aabc1234dsss12cm1223ddddAAAA1111ffgfhjkl
for i=1 to len(str)
s=mid(str,i,1)
if IsNumeric(s) or IsLeter(s) then
Mystr=Mystr & s
endif
next

'然后按要求提取出来
for i=8 to len(str) step 8
s=mid(Mystr,i,1)&","
next

'去掉S末尾的一个逗号
Mystr=mid(s,1,len(s)-1)'最后结果是:“4,m,d,1,l”


  • 打赏
  • 举报
回复
第一组数据"abc1234"是7位啊
hwmys 2007-10-14
  • 打赏
  • 举报
回复
如果分割是有规律的还好办,但是其它就没戏了,毕竟代码不是智能的。
不能从源头着手吗?要求大家录入时标准化
波导终结者 2007-10-14
  • 打赏
  • 举报
回复
分割符位数不定的话可能得一位一位判断是否为字母及数字,若是,计数器加1,逢8则取出,若不是直接丢弃
adamcannibal 2007-10-14
  • 打赏
  • 举报
回复
我是要处理实验室的实验数据,由于输入记录的人不一样,所以格式也不是很规范,唯一确定的就是每组数都是8位,但是中间的分割就不一定是什么,是多少了。
hwmys 2007-10-14
  • 打赏
  • 举报
回复
dim tStr,aStr,bStr,cStr as string
dim Strno%
tStr="abc1234,dsss12cm,1223dddd AAAA1111.............."
bStr=""
for Strno%=0 to xx(字符串组数)
aStr=mid(tStr,1+Strno%*8,8)
if trim(aStr)="" then exit for
cStr=mid(aStr,7,1)
if bStr="" then
bStr= cStr
else
bStr= bStr & "," & cStr
endif
next Strno%

****************************************
bStr就是,(上面这些字符提取后应该是“4,m,d,1"),
波导终结者 2007-10-14
  • 打赏
  • 举报
回复
没注意看这些字符串是连在一起的,这是序列号或注册码之类的东东吧
如果每一组长度都一样的话,变化mid的第二个参数就行了
波导终结者 2007-10-14
  • 打赏
  • 举报
回复
用len得到字符串长度,mid(字符串,len-1,1)得到最后一个字符,再套一层循环处理所有字符串并连接

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧