vba中的正则表达式

先来吐槽。

尼玛这是文计啊!!!给文科生上的有木有!文科生mm学个html都吐槽“好难吖吖”更不要提VBA了好不好!

槽毕。


作业要求(原文)

集字辅助程序:对一个自己选定的碑帖,让用户输入自己要集的对句,则可以显示出对句中的每一个字应该从第几幅图片中集,如果没有对应的整字,则根据偏旁汉字表,查找其所对应的偏旁部首,进而给出含这些偏旁部首的字在碑帖中的位置。
提示:
你可以人工地将碑帖中所有字的信息(比如所在图片和位置、所包含偏旁)存入代码并按需读取。


javascrpt的部分暂且不谈,单是处理“偏旁汉字表”(Excel)就让我头大了(尼玛这可是文计啊啊啊!!!) 原文件 from: http://chinese.exponode.com/8_3r.htm

Excel分为两个sheet,sheet1包含了要用到的内容,但是有些常见的偏旁包含汉字太多,于是在sheet2中有完整的汉字表。现在,需要把两个sheet汇总,得到完整的偏旁汉字表,以便js做匹配的时候查找。

sheet1中需要改变的单元格具有“XXXXXX(38popu\d\d)”的特征,其中“\d\d”就是sheet2中所对应的行数(后来才发现,应该是 \d\d + 2 = sheet2中的行数)。

代码如下

Sub app()
Rem my first vba!!!

Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")

With re
    .Pattern = "\d*\)"

    Dim matchs As Object, match As Object
    Dim y As Integer
    Dim E As Range

    For Each c In Sheets(1).Range("E1:E1366")
    Rem MsgBox c.Value
        Set matchs = .Execute(c.Value)
        For Each match In matchs
            y = Val(match) + 2
            'MsgBox y
            Set E = Sheets(2).Range("D" & y)
            c.Value = E.Value
        Next
    Next

End With

End Sub

本人很久以前只是在书本上读过VB,这回真的需要自己编写VBA,实属是生平第一次,代码冗余神马的不谈了(比如那个Range E就可以省掉貌似)。先把D列复制到E列,再执行vba,实测可以正常工作(233333居然成功了)。


几点疑问,跪求好心大虾指教!先谢过!

  1. 没找到操作单元格的办法。有个“Cells”对象可以操作一个单元格,但是前缀不能加“Sheets”对象。我采用的办法是用“Range”,感觉有点“炮打蚊子”了。
  2. 据说vba支持正向预测零宽断言???原表中个别单元格是以“/38popu/d/d\)?”结尾的,后边的“)”有的单元格没有,我最初的想法是"/(?<=38popu)\d\d",TNND就是过不去,度娘说强(dou)大(bi)的vbs只支持正向预测零宽断言,至于负向零宽断言、回顾零宽断言神马的统统不支持(谁起的“零宽断言”这个名字呢?我管它叫正(负)向预查(回顾),多直观!),于是我机智的采用“/\d\d\)”得到一个字符串(i.e. "18)"),然后转换成整数。
  3. "Regex.Execute"返回的是“match对象”,match对象是神马?我感觉就是字符串数组,还得用个“For Each match In matchs”来取出字符串(貌似“match对象”就是字符串),我断言有更简单的方法。
  4. With结构是VB特有的么?怎么用啊?貌似比逐句调用对象的属性或者方法效率要高;我以前从未遇到过。

最后继续吐槽

  1. VBA的界面跟VS一个模(cao)样(xing),或者说,还不如。高亮是有的,还带编辑时自动编译并挑错;但是您好歹来个自动缩进啊!自动补全也不是想有就有的,好像“As”,“.”能蹦出来,蛋疼死了。另外我眼瞎,调个黑底绿字都麻烦死,尼玛关键字还有背景颜色!!!烦躁。(我觉我我患上vi综合症了,现在只要是编辑文本我第一反应就是用vi,不论那玩意是不是有现成的IDE)
  2. 一切折腾归咎于geek.设想我是个弱(ru)弱(ya)的文科生,需要合并表单,手工复制粘(念zhan还是念nian?)贴,不就38个单元格么?简单,老子apm300+,10分钟搞定!!!
  3. 合并完了也是bug满天飞,几乎每行都能匹配到“\[^一-龟]”的外星字符([一-龟]表示gbk一级字库,常见的汉字都有了),不过这点影响不大。
  4. 尼玛这是文计么?!这是号称讲html/css/javascript的文计么?!老师真得谢谢你!!!学javascript,还买一赠一逼我自学vba;嗯,趁年轻多学点总是没坏处的。
完。

PS:重点是javascript的正则表达式,还在后头呢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值