ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 正则提取 想用正则replace 一步提取

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-30 11:59 | 显示全部楼层 |阅读模式
本帖最后由 perfect131 于 2024-1-1 16:38 编辑

                我已经实现分段提取了 ,但我想的用一个表达式提取,最好是用 正则replace
image.png
                 现在提取的结果是
  1. 癸卯>小>大>小>大>大>小>大>大>小>大>小>大
  2. 润            二月小
  3. 新年          01-22
复制代码

我想要的结果是 有润
  1. 癸卯>小>大>小>大>大>小>大>大>小>大>小>大>二>小>01-22
复制代码
没有 润
  1. 癸卯>小>大>小>大>大>小>大>大>小>大>小>大>>>01-22
复制代码

请大神们抽空看看,谢谢



正则.zip

3.7 KB, 下载次数: 16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-12-31 02:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-31 02:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 正则提取()
  2.     Dim data
  3.     data = readfile(ThisWorkbook.Path & "\2023.txt")
  4.     Set reg = CreateObject("vbScript.Regexp")
  5.     reg.Global = True
  6.     reg.Pattern = "(h1|p>\d+-\d+)"
  7.     ar = Split(data, Chr(10))
  8.     For i = 0 To UBound(ar) '海选,保留 h1 以及 p 数字-数字 的行
  9.         If reg.test(ar(i)) Then
  10.             n = n + 1
  11.             s = s & ar(i)
  12.         End If
  13.     Next
  14.     reg.Pattern = ".*?<\w+>((\d+-\d+(?=<))|农历(.*?)(?=年)|(闰.*?(?=月))?.*?月([大小]))|.+"
  15.     s = Split(Trim(reg.Replace(s, "$2$3$4$5 "))) '精选,保留农历年、大年初一阳历以及闰月并重新排列
  16.     t = "": r = ">>"
  17.     For i = 0 To UBound(s)
  18.         t = Mid(s(i), 1, 1)
  19.         If t Like "#" Then
  20.             If y = "" Then y = s(i) '大年初一的阳历
  21.         ElseIf t = "闰" Then
  22.             r = Mid(s(i), 2, 1) & ">" & Right(s(i), 1) '闰月份
  23.         Else
  24.             sn = sn & ">" & s(i)
  25.         End If
  26.     Next
  27.     sn = sn & ">" & r & ">" & y
  28.     MsgBox Mid(sn, 2)
  29. End Sub
  30. '读取文件
  31. Function readfile(ByVal filename As String, Optional filetype As String = "utf-8")
  32.     Dim ReadStream As Object
  33.     Set ReadStream = CreateObject("ADODB.Stream")
  34.     Dim FileContent As String
  35.     With ReadStream
  36.         .Type = 2                                              'adTypeText
  37.         .Charset = filetype
  38.         .Open
  39.         .LoadFromFile filename
  40.         FileContent = .ReadText
  41.         .Close
  42.     End With
  43.     readfile = FileContent
  44. End Function
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-31 11:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 perfect131 于 2023-12-31 11:30 编辑

感谢,但是我要的是 一个表达式解决,我不要 Split(data,vblf)
表达式很简洁,不过 12-30 也提取了
image.png



  1. .+>农历(.+?)年|.+天, 闰(\W{1,2}月[大|小])|.+>正月([大|小])|.+<p>初一</p>\n.+?<p>(\d+-\d+)</p>|.+>二月([大|小])|.+>三月([大|小])|.+>四月([大|小])|.+>五月([大|小])|.+>六月([大|小])|.+>七月([大|小])|.+>八月([大|小])|.+>九月([大|小])|.+>十月([大|小])|.+>十一月([大|小])|.+>十二月([大|小])|\n|.+
复制代码
image.png

这是 我最新用的表达式 我想把 二月小  01-22 显示到最后,就像一楼说的
我想要的结果是 有润
  1. 癸卯>小>大>小>大>大>小>大>大>小>大>小>大>二月小>01-22
复制代码
没有 润
  1. 癸卯>小>大>小>大>大>小>大>大>小>大>小>大>>01-22
复制代码


TA的精华主题

TA的得分主题

发表于 2024-1-1 06:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
歪个楼,尝试在js宏里使用cheerio
是用browserify转成一个js,直接粘贴到模块1里,还真的可以用
加载一个html字符串,然后就可以像jquery里那样搜索操作dom,还挺好用的


image.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-1 12:54 | 显示全部楼层
image.jpg
image.jpg

按你的想法一网打尽也不是没有办法,只是 .Pattern 超长

.Pattern="[\s\S]*?<h1>农历(.*?)年.*?(闰(.)月([大小]))?<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<p>(\d+-\d+)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]*?<h1>[^闰].*?(.)<[\s\S]+"

Msgbox reg.replace(data,"$1>$5>$7>$8>$9>$10>$11>$12>$13>$14>$15>$16>$17>$3>$4>$6")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-1 16:28 | 显示全部楼层
DevilW 发表于 2024-1-1 12:54
按你的想法一网打尽也不是没有办法,只是 .Pattern 超长

.Pattern="[\s\S]*?农历(.*?)年.*?(闰(.) ...

正是我要的,十分感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-1 16:41 | 显示全部楼层
本帖最后由 perfect131 于 2024-1-1 16:53 编辑

最终 表达式
  1. [\s\S]*?<h1>农历(.*?)年.*?(闰(.+)月([大小]))?<[\s\S]*?<h1>.*?(.)<[\s\S]*?<p>初一</p>[\s\S]*?<p>(\d+-\d+)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?
  2. <h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]*?<h1>.*?(.)<[\s\S]+
复制代码
2.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 15:37 , Processed in 0.050473 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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