繁体   English   中英

如何为 VBA 调整正则表达式模式

How can I adapt a regex pattern for VBA

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用正则表达式删除特定的文本字符串,并具有以下适用于 regex101.com 但是我知道 VBA 在使用正则表达式时有一些细微差别,而我的模式似乎根本不起作用。

我验证的模式在下面的代码中,如果可能的话,我还想将它与下面的代码结合起来(旨在删除 html 标签)“\<.*?>”这确实有效,但我目前运行一个单独的 regex.replace function 删除它。

Dim regEx As Object , str As String
Set regEx = CreateObject("VBScript.RegExp")

With regEx
  '.Pattern = "<a\b([^>""']|""[^""]*""|'[^']*')+class=""changed-by"">.*?<\/a>"
'.pattern = "\<.*?\>" ' this is the second pattern i use to remove html tages which works
  .Global = True 'If False, would replace only first
  .IgnoreCase = False
  .MultiLine = False
End With

str = some text here <a href="/instrument/2014/36.pdf" target="_blank" title="2014/36 - 01/07/2014" class="changed-by">1</a> some text here
Debug.Print regEx.Replace(str, "")
1 个回复

如果您要使用Replace function,我认为您需要一些 output 参数,将您找到的内容替换为""将始终返回"" 这就是我想出的,我不确定 Regex 是否真的比你的更好,但它适用于 VBA。 主要区别是我添加的第一个和最后一个组以提取所有文本。

Dim RegEx As New RegExp
Dim Value As String

RegEx.IgnoreCase = True
RegEx.Pattern = "(.*?)<a\b(?:""[^""]*?""|'[^']*?'|[^>]*?)+>([^<]*?)<\/a\b.*?>(.*)"
Value = "some text here <a href=""/instrument/2014/36.pdf"" target=""_blank"" title=""2014/36 - 01/07/2014"" class=""changed-by"">1</a> some text here"
Debug.Print RegEx.Replace(Value, "$1$2$3")

另一个选项是您只需使用Execute function 并将文本从相应的组中拉出。

Dim Col As MatchCollection
Dim i As Long
Set Col = RegEx.Execute(Value)
With Col
    For i = 0 To .Count - 1
        With .Item(i)
            Debug.Print .SubMatches(0) & .SubMatches(1) & .SubMatches(2)
        End With
    Next
End With
1 VBA 正则表达式匹配模式

我有 RF123456789、RF1234567890 等记录。 我只想匹配以“RF”开头的记录,后面紧跟 9 位数字。 如果大于 9 位或小于 9 位应显示 Invaid。 我写了下面的代码,但问题是,如果数字大于 9,它也显示有效。 我知道我写信只是为了检查它是否以 RF 开头并后跟 9 位数 ...

2 使用VBA的正则表达式模式

我目前正在使用VBA和正则表达式测试我需要对其中一个字段进行的更新。 我当前的SQL更新是这样的: 如您所见,我正在使用的正则表达式是[\\(]+[A-z0-9\\/]+[\\)]然后将其替换为[\\(]+[A-z0-9\\/]+[\\)] 。 我正在使用的VBA脚本如下(我 ...

4 组合多个正则表达式模式 VBA

我使用下面的代码从 excel 单元格中提取大小,它有 7 种不同的模式。 以下代码用于提取 OZ 大小,但是,我需要执行相同的 ml 和 gram (g)。 因此,我编写代码的方式将非常冗长。 价值结果尺寸:0.028 盎司 x 5 0.028 盎司 x 5 尺寸:6x0.04 盎司 + 30 ...

5 VBA多级正则表达式或改进的模式?

我在VB中处理正则表达式时遇到问题。 我的文字是: 可悲的是目前在多伦多主要火车站待定 我在Expresso中测试了我的正则表达式,并找到了适合我的正则表达式。 事情是:多伦多火车总站也只能是“多伦多”。 这是我的模式: 问题是在VB中处理正则表达式,因为我的模式 ...

2012-10-01 06:41:51 1 202   regex/ vba
6 VBA-正则表达式

我正在尝试为12个字符的字母数字字符串设置规则。 它必须始终包含字母(az或AZ)和数字(0-9)。 每个元素的长度可以变化,但是每个元素必须至少包含一个。 它总共必须恰好有12个chr。 我最好的尝试是这样的:EX:AB1111111111 ^([0-9] + ...

2018-09-07 07:57:54 1 32   regex/ vba
7 正则表达式和vba

有谁知道如何从RegExp.Execute()函数中提取匹配作为字符串? 让我告诉你到目前为止我得到了什么: 我希望将持有匹配项的对象“myMatches”转换为字符串。 我知道每次执行只会有一场比赛。 有没有人知道如何从对象中提取匹配项,因为要显示的字符串可以通过MsgB ...

8 VBA正则表达式问题

如果给定Excel单元格的内容与特定正则表达式匹配,VBA是否有任何良好的检查机制? 就我而言,我想知道某个单元格的格式是否 实际上,开头只有一个定义的字母,其后是未指定数量的数字。 如何将其放入If-Else构造中? 迎接诗丹 ...

9 VBA正则表达式

我试图循环浏览电子邮件正文并将电子邮件转发到其他收件箱。 我的正则表达式将前后的任何4-6个字符编号与空格匹配,但是问题是电子邮件中包含了日期,因此它也选择了四个字符编号“ 2017”。 正则表达式是什么省略了“ 2017”而只取所有其他4-6个字符数字。 这是我的代码。 这是我转 ...

2017-01-20 13:36:12 1 117   regex/ vba
10 VBA正则表达式后的一切

我有一句话“lorem ipsum dolor mark words blah blah blah” 我只需要(但不包括)“标记词”之后的词。 “标记词”是句子中唯一保持不变的词。 我设法找到(?&lt;=\\bmarker words\\s)(\\w+)这不仅在 vba 中不起作用,而且在标 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM