ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 下面这个正则如何匹配?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-3-2 04:23 | 显示全部楼层 |阅读模式
已知字符A和B,都在行首,但中间相隔若干行内容。
我想:
1、匹配A到B之间的内容,不包括A和B;
2、匹配A到文档末尾的内容,不包括A。
下面是我分别写的正则,怎么也匹配不上:
.Pattern = A & "([^\r]*[\r][\s\S]+?)(?=" & B & ")"
.Pattern = A & "([\r][\s\S]+)"
请问哪位方便指点一下呀,谢谢!
上述提问仅是举例,实际情况中A和B是一段时间和文字的综合内容,且A和B要事先经过其它VBA代码的运算才能得出。
我F8逐一得出了A和B的正确答案,就卡在上面那儿,搞了一晚上了……
   由于我问题的情况复杂,没有上传附件,抱歉!

TA的精华主题

TA的得分主题

发表于 2013-3-2 09:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
包含A和B的正则表达式,.Pattern = "A.*?B",要除去用替换

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-2 10:35 | 显示全部楼层
首先感谢 您的关注和指点。
我经过多次尝试,按您的意思走,结果一样不能匹配哈。

TA的精华主题

TA的得分主题

发表于 2013-3-2 11:02 | 显示全部楼层
chenlifeng123 发表于 2013-3-2 10:35
首先感谢 您的关注和指点。
我经过多次尝试,按您的意思走,结果一样不能匹配哈。
  1. Sub yy()
  2. B = "匹配A到B之间的内容"
  3.     Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  4.     With regex1
  5.         .Global = True    '设置全局可用
  6.         .Pattern = "A.*?B"
  7.     End With
  8.         Set c = regex1.Execute(B)
  9.         A = c.Item(0)
  10.         A = Replace(Replace(A, "A", ""), "B", "")
  11. MsgBox A
  12. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-3-2 11:03 | 显示全部楼层
chenlifeng123 发表于 2013-3-2 10:35
首先感谢 您的关注和指点。
我经过多次尝试,按您的意思走,结果一样不能匹配哈。
  1. Sub yy()
  2. B = "匹配A到B之间的内容"
  3.     Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  4.     With regex1
  5.         .Global = True    '设置全局可用
  6.         .Pattern = "A.*?B"
  7.     End With
  8.         Set c = regex1.Execute(B)
  9.         A = c.Item(0)
  10.         A = Replace(Replace(A, "A", ""), "B", "")
  11. MsgBox A
  12. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-2 12:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我用其它的文档举例内容来尝试,发现非常正确。
我晚点再用我现在的复杂内容尝试。谢谢大量的指点!灰常感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-3 03:44 | 显示全部楼层
wj2368 发表于 2013-3-2 11:03

发现问题,仍然匹配不了,我的数据内容如下,我放在WORD中:
广东公司 (1998.8-2005.8)
定额站
历任办事员,标准管理科副科长、科长,信息中心主任
汇报线:
工作地点:潍坊
下属:
职责:
? 负责潍坊市建设工程标准规范的管理、监督、检查
? 潍坊市工程造价专业人员的培训、考试
? 潍坊市建设工程材料价格信息的调查、编制
? 山东省工程造价定额的解释,地方一次性补充定额的编制
? 潍坊市建设工程信息中心的筹备、组建及运营管理

北京公司 (民企) (2005.8-2008.9)


您的代码运行出错,下面是我的代码,一样不行:
  1. Sub yy()
  2. b = ActiveDocument.Range.Text
  3. cc = "广东公司 (1998.8-2005.8)"
  4. dd = "北京公司 (民企) (2005.9-2008.1)"
  5.     Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  6.     With regex1
  7.         .Global = True    '设置全局可用
  8.         .Pattern = cc & ".*?" & dd
  9.         If .test(b) Then
  10.             A = .Execute(b)(0)
  11.             A = Replace(Replace(A, cc, ""), dd, "")
  12.         Else
  13.             A = "111"
  14.        End If
  15. End With
  16.        MsgBox A
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-3-3 17:40 | 显示全部楼层
  1. Sub ek_sky()
  2.     b = ActiveDocument.Range.Text
  3.     cc = "广东公司 (1998.8-2005.8)"
  4.     dd = "北京公司 (民企) (2005.8-2008.9)"
  5.     If InStr(b, cc) Then
  6.         If InStr(b, dd) Then
  7.             MsgBox Mid(b, Len(cc) + 1, Len(b) - Len(cc) - Len(dd) - 1)
  8.         Else
  9.             MsgBox "111"
  10.         End If
  11.     End If
  12. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-3 20:35 | 显示全部楼层
我在纳闷的是,正则问题出在哪儿哈。
倒是用替换法或是其它办法,我也想到了一个方子,分享大家:
  1. Sub ek_sky()
  2.     b = ActiveDocument.Range.Text
  3.     CC = "广东公司 (1998.8-2005.8)"
  4.     dd = "北京公司 (民企) (2005.8-2008.9)"
  5.     MsgBox Split(Split(b, CC)(1), dd)(0)
  6. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-3-4 08:11 | 显示全部楼层
chenlifeng123 发表于 2013-3-3 03:44
发现问题,仍然匹配不了,我的数据内容如下,我放在WORD中:
广东公司 (1998.8-2005.8)
定额站
  1. Sub yy()
  2. B = ActiveDocument.Range.Text
  3. h = Len("广东公司(1998.8 - 2005.8)")
  4. With CreateObject("VBSCRIPT.REGEXP")
  5.   .Global = True
  6.   .Pattern = "(广东公司)(.*?)(?=(北京公司))"
  7.   If .test(B) Then A = Replace(Trim(Mid(.Execute(B)(0), h)), """", "")
  8. End With
  9.        MsgBox A
  10. End Sub
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-22 00:20 , Processed in 0.035726 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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