【在线等待】怎样取这样的数据?
总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))总裁(CEO);决策一层(JCZ);行政总监(FCZ);张 无忌(副总裁的职位名称。)
总裁(CEO);决策一层(JCZ);行政总监(FCZ);财务经理(CWC);财务处科员(CWY);杨 舒鑫
上面这三组数据,怎样取每个数据中的人名呢?请各位大侠指教一下,多谢!!!
[ 本帖最后由 zhengpeipei 于 2010-1-12 16:59 编辑 ] 用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?最后一个值取出来后怎样取人名呢? :funk: 在线等待啊 str="孔 向(人员支持(露娜))"
i= RegExpTest ("\(",str)
msgbox left(str,i)
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute (strng)
IfMatches.count=0Then
RegExpTest=len(strng)
else
RegExpTest=Matches(0).FirstIndex
End If
End Function 多谢wugecat提供的代码,我试试。 wugecat的头象是大剑吗?
回复 7# 的帖子
呵呵,是啊.....我很喜欢大剑 不知道现在大剑的第二季出来了没有,漫画倒是早就有了。回复wugecat的帖子
用Array=split(a,“;”)分割每个数据后怎样取出最后一个值?回复 10# 的帖子
Array=split(a,“;”)i=ubound(Array)
str=Array(i)
不用spilt函数获取字符中姓名的方法(自己写的,仅供学习交流)
'以"总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"为例str="总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"
Callgetname(str)
Public function getname(str)
strlength=len(str) '获取字符串str的长度
str1length=InStrRev(str,";",strlength) '取右边第一次出现分号的位置
strname=mid(str,str1length+1,len(str)) '取从右边第一次出现分号后面的所有字符并将值赋给strname ,即:孔 向(人员支持(露娜))
str2length=InStr(1,strname,"(") '取strname中第一次出现左括号的位置
If str2length>0 Then '如果strname中存在左括号,则取左括号前面的字符,并弹出窗口显示该值
getname=mid (strname,1,str2length-1)
msgbox getname
else '如果strname中不存在左括号,则取整个字符,并弹出窗口显示该值
getname=strname
msgbox getname
End If
End Function
'getname就是你想要的名字
'.另外因为这里是测试交流论坛,所以在写的代码中最好加上详细的注释,这样才能让新人也很容易看懂
[ 本帖最后由 feiyunkai 于 2010-1-13 15:06 编辑 ] str1 = "总裁(CEO);决策一层(JCZ);人员支持科员(CTOO58896TEERL);孔 向(人员支持(露娜))"
str2 = "总裁(CEO);决策一层(JCZ);行政总监(FCZ);张 无忌(副总裁的职位名称。)"
str3 = "总裁(CEO);决策一层(JCZ);行政总监(FCZ);财务经理(CWC);财务处科员(CWY);杨 舒鑫"
Set Re = New RegExp
strReg = ".*;(.*)"
WScript.Echo FindName(strReg, str1) '将str1换为你想要取姓名的字符串就可以了
Set Re = Nothing
Function FindName(strReg, strString)
strReg2 = "(.*)\(.*"
Re.Pattern = strReg
Re.Global = True
strName = Re.Replace(strString, "$1")
If InStr(1, strName, "(", vbTextCompare) <> 0 Then
strName = FindName(strReg2, strName)
End If
FindName = strName
End Function
什么也不说了,也没有可以多说的
回复 13# 的帖子
原来还可以这样的..学习了 我试了好几次才弄成功,唉,老了。。 你的那个$1就相当于"孔 向(人员支持(露娜))"么? strReg = ".*;(.*)"$1 相当于满足 strReg 里面匹配到的第一个词,在这里就是 (.*)
因为正则匹配是从后面来的,所以说,.*;就是匹配最后一个;后面的 如“孔 向(人员支持(露娜))”
然后判断里面有无"(", 如果有,继续匹配,取出姓名 学习了,真长见识啊
回复 13# 的帖子
在QTP里运行你的脚本报错缺少WScript对象,保存为VBS文件也报错,错误的参数个数 :) 值得学习!
页:
[1]
2