ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: kellven123

[求助] 正则表达式

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-8 11:16 | 显示全部楼层
duquancai 发表于 2018-6-8 11:08
根据你提供的附件运行,如果没问题就行,至于说扩充后如何如何,那就另当别论!!!

请你再帮我看看,我扩充了一下代码...但是就不行了....麻烦你了..

还是A1单元格`我给你附件了

test.7z

20.43 KB, 下载次数: 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-8 14:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2018-6-8 11:08
根据你提供的附件运行,如果没问题就行,至于说扩充后如何如何,那就另当别论!!!

我在你的逻辑和正则不变的情况下重新写了一段,但是发现写出来的结果会有一些我不需要的东西在里面,
例如<td style="width: 100px;">等等。

请问一下这是什么原因呢?明明正则还是用你之前给我的。

代码如下:

  1. Sub main1()
  2. Dim reg As Object
  3. Set reg = CreateObject("vbscript.regexp")
  4. s = Sheets("&#207;&#214;óDμ&#196;").[a2]
  5. reg.Pattern = "<tr data-index=""\d+"">(.+?)<\/tr>"
  6. reg.Global = True
  7. Set List = reg.Execute(s)
  8. ListCount = List.Count
  9. For i = 0 To ListCount - 1
  10.     μ×êyROW = Worksheets("&#196;&#191;μ&#196;").Range("A65536").End(xlUp).Row + 1
  11.     Worksheets("&#196;&#191;μ&#196;").Range("A" & μ×êyROW) = i + 1
  12.     reg.Pattern = "<td[^>]+>([^<]+)<\/td>"
  13.     reg.Global = True
  14.     Set List&#207;ê&#199;é = reg.Execute(List(i))
  15.     List&#207;ê&#199;éCount = List&#207;ê&#199;é.Count
  16.     For x = 0 To List&#207;ê&#199;éCount - 1
  17.         Worksheets("&#196;&#191;μ&#196;").Cells(μ×êyROW, x + 2) = List&#207;ê&#199;é(x)
  18.     Next
  19. Next
  20. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-6-8 19:53 | 显示全部楼层
本帖最后由 duquancai 于 2018-6-8 20:03 编辑

kellven123 发表于 2018-6-8 11:16
请你再帮我看看,我扩充了一下代码...但是就不行了....麻烦你了..

还是A1单元格`我给你附件了
  1. Sub main()
  2.     Dim js As Object, s$
  3.     Set js = CreateObject("MSScriptControl.ScriptControl")
  4.     js.Language = "JavaScript": js.AddObject "rg", Sheets("目的").Range("a1")
  5.     s = Sheets("现有的").[a1]: Sheets("目的").Cells.Clear
  6.     s = Replace(Replace(s, vbLf, "\r"), "'", "\'")
  7.     s = "j=0;r=/<tr data-index=""\d+"">(.+?)<\/tr>/g;c=/<td[^>]+>([^<]+)<\/td>/g;while(m=r.exec('" & s & "')){j++;i=1;while(n=c.exec(m[1])){rg(j,i++)=n[1]};};"
  8.     js.eval (s)
  9.     MsgBox "OK!"
  10. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-6-9 05:33 来自手机 | 显示全部楼层
kellven123 发表于 2018-6-8 14:59
我在你的逻辑和正则不变的情况下重新写了一段,但是发现写出来的结果会有一些我不需要的东西在里面,
例 ...

For x = 0 To List&#207;ê&#199;éCount - 1
        Worksheets("&#196;&#191;μ&#196;").Cells(μ×êyROW, x + 2) = List&#207;ê&#199;é(x)
    Next
这句赋值 可能要用 reg对象的subMatches(0)
https://wk.baidu.com/view/7c33478669eae009591bec04?pcf=2
看一下这里的subMatches

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-11 10:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2018-6-8 19:53
kellven123 发表于 2018-6-8 11:16
请你再帮我看看,我扩充了一下代码...但是就不行了....麻烦你了..

谢谢,我看你的代码是因为换行符的原因?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-11 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2018-6-9 05:33
For x = 0 To List&#207;ê&#199;éCount - 1
        Worksheets("&#196;&#191;μ&#196;").Cells(μ× ...

谢谢,我明白了,我用了submatcher就可以了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 12:27 , Processed in 0.029278 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表