ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教一个用正则表达式提取字符串的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-12-13 00:20 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

请教正则高手一个问题
我想从源字符串里提取一些有规律的字符
如下表所示
想把源字符串里的以ISO三个大写字母+7个数字这样的字符串,全部找出来,放在一起,中间以|分开。
请教如何实现? 谢谢

源字符串
提取出的字符串
ISO8956000 |  EIPU 56848 | ISO5457856 | OPU~745
ISO8956000  |ISO5457856 |
RESIS6MP  |ISO8956000 | EIPU 56848 | ISO1247851 | OPU~745
ISO8956000  |ISO1247851 |

SAMP1.rar

3.54 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2016-12-13 00:39 | 显示全部楼层
本帖最后由 as42065300 于 2016-12-13 00:49 编辑

用这个表达式匹配下
Public Sub t()
Dim reg As Object
Dim brr, ar(), mac As Object
Set reg = CreateObject("VBScript.RegExp")
brr = Sheet1.Range("a1").CurrentRegion
ReDim ar(1 To UBound(brr) - 1, 1 To 1)
For i = 2 To UBound(brr)
    With reg
        .Global = True
        .Pattern = "ISO\d*"
        Set mac = .Execute(brr(i, 1))
        For Each m In mac
           If rr = "" Then rr = m.Value Else rr = rr & "|" & m.Value
        Next
        ar(i - 1, 1) = rr
        rr = ""
    End With
Next
Sheet1.Range("c2").Resize(UBound(ar)) = ar
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-12-13 08:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-12-13 08:57 | 显示全部楼层

这个我也知道,但一个源字符串里有可能有很多很多符合"ISO\d{7}"的小字符串,最后不知道要怎么输出?

TA的精华主题

TA的得分主题

发表于 2016-12-13 08:57 | 显示全部楼层
xiaoangel 发表于 2016-12-13 08:57
这个我也知道,但一个源字符串里有可能有很多很多符合"ISO\d{7}"的小字符串,最后不知道要怎么输出?

二楼已经给了代码啊。

TA的精华主题

TA的得分主题

发表于 2016-12-13 09:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-13 10:39 | 显示全部楼层
xiaoangel 发表于 2016-12-13 08:57
这个我也知道,但一个源字符串里有可能有很多很多符合"ISO\d{7}"的小字符串,最后不知道要怎么输出?

你看看正则的那几个方法就会输出的了。论坛有正则的资料很多哈。

TA的精华主题

TA的得分主题

发表于 2016-12-13 15:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub t()
  2. Dim reg As Object, brr, mh, n&, m, rr$
  3. Set reg = CreateObject("VBScript.RegExp")
  4. reg.Global = True
  5. reg.Pattern = "(ISO\d{7})"
  6. n = [a65536].End(xlUp).Row - 1
  7. brr = Sheet1.[a2].Resize(n)
  8. For i = 1 To n
  9.     Set mh = reg.Execute(brr(i, 1))
  10.     For Each m In mh
  11.         If rr = "" Then rr = m Else rr = rr & "|" & m
  12.     Next
  13.     brr(i, 1) = rr
  14.     rr = ""
  15. Next
  16. Sheet1.[c2].Resize(n) = brr
  17. End Sub
复制代码

h.rar

8.82 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2016-12-13 15:26 | 显示全部楼层
Sub test()
Dim arr(), i%, n%, rng As Range, rngs As Range
Set rex = CreateObject("vbscript.regexp")
    With rex
    .Global = True
    .Pattern = "ISO\d{7}"
        For Each rng In Range("a2", Cells(Rows.Count, 1).End(xlUp))
        Set met = .Execute(rng)
            For i = 0 To met.Count - 1
                n = n + 1
                ReDim Preserve arr(1 To n)
                arr(n) = met(i)
            Next
        rng(1, 3) = Join(arr, "|")
        n = 0
        Next
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2018-9-26 17:53 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 02:36 , Processed in 0.029138 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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