Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2489|回复: 4

[已解决]请教如何正则表达式提取指定数据

[复制链接]
发表于 2022-4-17 11:11 | 显示全部楼层 |阅读模式
本帖最后由 jian82372387 于 2022-4-17 13:16 编辑

已使用百度OCR提取粤康码截图里面的信息,得到得内容如下红色字体内容,如何通过正则表达式从下面内容分别提取姓名,检测时间,检测结果三个部分放到excel表格中,谢谢。(所需结果为:姓名张三,检测时间:2022-03-10 00:00,检测结果:阴性)
内容:晚上8:52,R令8☐¥,〈核酸检测记录,●●●,核酸检测记录,O刷新,检测完成,检测中,张三,采样时间,2022-03-0920:54,检测时间,2022-03-1000:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,张三,采样时间,2022-01-1715:22,检测时间,2022-01-1722:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,外省核酸查不到?点这里>>


最佳答案
2022-4-17 15:15
拿着 .xlsx 文件 问正则,
代码一句没有,
所以不像是卡在正则表达式,
------------------------------------------------
晚上8:52,R令8☐¥,〈核酸检测记录,●●●,核酸检测记录,O刷新,检测完成,检测中,张三,采样时间,2022-03-0920:54,检测时间,2022-03-1000:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,张三,采样时间,2022-01-1715:22,检测时间,2022-01-1722:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,外省核酸查不到?点这里>>

(你举例 不严谨 . 反白也是张三)
=======================================
Sub cs()
    Dim a$, regex As Object, matc, m, n&, i&, arr(1 To 10000, 1 To 3), temp$
    Set regex = CreateObject("VBScript.RegExp")
        
    a$ = "晚上8:52,R令8?¥,〈核酸检测记录,●●●,核酸检测记录,O刷新,检测完成,检测中,张三,采样时间,2022-03-0920:54,检测时间,2022-03-1000:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,张三,采样时间,2022-01-1715:22,检测时间,2022-01-1722:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,外省核酸查不到?点这里>>"
   
    With regex
        .Global = True
        .Pattern = "([^\,]*?\,采样时间)|(检测时间\,.*?\,)|(检测结果\,[^\,]*?\,)"
        
        Set matc = .Execute(a$)
        
        For Each m In matc
            temp = m.Value
            
            If Right(temp, 4) = "采样时间" Then
                i& = i& + 1
                n& = 1
                arr(i&, n&) = Split(temp, ",")(0)
            ElseIf Left(temp, 4) = "检测时间" Then
                n& = 2
                arr(i&, n&) = Left(Split(temp, ",")(1), 10) & " " & Right(Split(temp, ",")(1), 5)
            ElseIf Left(m.Value, 4) = "检测结果" Then
                n& = 3
                arr(i&, n&) = Split(temp, ",")(1)
            End If
            
        Next m
        
        For n& = 1 To i&
            Debug.Print arr(n&, 1) & " | " & arr(n&, 2) & " | " & arr(n&, 3)
        Next n&
        
    End With
   
End Sub



测试正则表达式.rar

8.3 KB, 下载次数: 3

发表于 2022-4-17 15:15 | 显示全部楼层    本楼为最佳答案   
拿着 .xlsx 文件 问正则,
代码一句没有,
所以不像是卡在正则表达式,
------------------------------------------------
晚上8:52,R令8☐¥,〈核酸检测记录,●●●,核酸检测记录,O刷新,检测完成,检测中,张三,采样时间,2022-03-0920:54,检测时间,2022-03-1000:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,张三,采样时间,2022-01-1715:22,检测时间,2022-01-1722:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,外省核酸查不到?点这里>>

(你举例 不严谨 . 反白也是张三)
=======================================
Sub cs()
    Dim a$, regex As Object, matc, m, n&, i&, arr(1 To 10000, 1 To 3), temp$
    Set regex = CreateObject("VBScript.RegExp")
        
    a$ = "晚上8:52,R令8?¥,〈核酸检测记录,●●●,核酸检测记录,O刷新,检测完成,检测中,张三,采样时间,2022-03-0920:54,检测时间,2022-03-1000:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,张三,采样时间,2022-01-1715:22,检测时间,2022-01-1722:00,检测机构,广州康赛医学检验实验室,数据来源,广东省卫生健康委员会,检测结果,阴性,外省核酸查不到?点这里>>"
   
    With regex
        .Global = True
        .Pattern = "([^\,]*?\,采样时间)|(检测时间\,.*?\,)|(检测结果\,[^\,]*?\,)"
        
        Set matc = .Execute(a$)
        
        For Each m In matc
            temp = m.Value
            
            If Right(temp, 4) = "采样时间" Then
                i& = i& + 1
                n& = 1
                arr(i&, n&) = Split(temp, ",")(0)
            ElseIf Left(temp, 4) = "检测时间" Then
                n& = 2
                arr(i&, n&) = Left(Split(temp, ",")(1), 10) & " " & Right(Split(temp, ",")(1), 5)
            ElseIf Left(m.Value, 4) = "检测结果" Then
                n& = 3
                arr(i&, n&) = Split(temp, ",")(1)
            End If
            
        Next m
        
        For n& = 1 To i&
            Debug.Print arr(n&, 1) & " | " & arr(n&, 2) & " | " & arr(n&, 3)
        Next n&
        
    End With
   
End Sub



回复

使用道具 举报

 楼主| 发表于 2022-4-17 15:32 | 显示全部楼层
砂海 发表于 2022-4-17 15:15
拿着 .xlsx 文件 问正则,
代码一句没有,
所以不像是卡在正则表达式,

大哥是我描述得不够清楚,例子后面反白也是张三使因为健康码截图是有一个人得多次核酸记录,所以OCR读图出来得文字会有多条数据,我只要最新一条数据就可以了,我是在网上找到一个爬虫代码参考得,修改一下正则表达式得规则就可以了,麻烦你了大哥
回复

使用道具 举报

 楼主| 发表于 2022-4-17 17:36 | 显示全部楼层
砂海 发表于 2022-4-17 15:15
拿着 .xlsx 文件 问正则,
代码一句没有,
所以不像是卡在正则表达式,

大哥请教一下如果检测时间只要日期后面得具体时间00:00不要,这正则(检测时间\,.*?\,)要怎么修改?
回复

使用道具 举报

发表于 2022-4-18 14:48 | 显示全部楼层
jian82372387 发表于 2022-4-17 17:36
大哥请教一下如果检测时间只要日期后面得具体时间00:00不要,这正则(检测时间\,.*?\,)要怎么修改?

没必要 非得 跟正则 杠,
这里 正则出的 不是:

2022-03-1000:00
而是:
检测时间,2022-03-1000:00


----------------------------------------------------------

            ElseIf Left(temp, 4) = "检测时间" Then
                n& = 2
                arr(i&, n&) = Left(Split(temp, ",")(1), 10)      ' 后面不要 就好 & " " & Right(Split(temp, ",")(1), 5)
----------------------------------------------------------
Ps: 你提这个 要求 就说明 , 没读懂 程序


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 15:09 , Processed in 0.243005 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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