我正在尝试使用regex删除特定的文本字符串,并在regex101.com上运行以下内容,但是我了解使用regex时VBA有一些细微差别,而我所拥有的模式似乎根本不起作用。

我验证的模式在下面的代码中,如果可能的话,我也想将其与下面的代码(旨在删除html标签)“ \\ <。*?>”结合使用,但这确实有效,但是我当前运行了一个单独的regex.replace功能将其删除。

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楼 票数:0

如果要使用Replace函数,我认为您需要一些输出参数,用""替换找到的内容将始终返回"" 这是我想出的,我不确定Regex是否真的比您的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函数并将文本拉出各个组。

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

  ask by Stewart Lancaster translate from so

未解决问题?本站智能推荐:

2回复

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

我使用下面的代码从 excel 单元格中提取大小,它有 7 种不同的模式。 下面的代码用于提取 OZ 大小,但是,我需要做相同的 ml 和 gram (g)。 因此,我编写代码的方式将非常冗长。 价值 结果 尺寸:0.028
2回复

正则表达式和vba

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

VBA正则表达式问题

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

VBA正则表达式后的一切

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

VBA正则表达式模式组合匹配和不匹配模式

尝试从不同数据类型之间没有可见分隔符的字符串中提取有效的电话号码。 实际上,潜在电话号码周围的数据是随机且不相关的。 应该匹配什么。 我正在尝试匹配以下任一项: [random garbage][optional '1'][optional '(']###[optional')'[[ran
1回复

正则表达式 - 名称模式

我是编码的初学者,我现在正在弄清楚如何使用正则表达式。 我正在做的是从 Outlook 2013 中的传入邮件中提取数据。我使用 VBA + RegEx 来提取我需要的数据并将它们合并/传输到 Excel 工作表,但我的问题是名称。 我可以弄清楚需要什么模式,因为有很多可能的名称结构。 这是一个
3回复

日期编码文档的VBA正则表达式模式

我已经开始从事一项新工作,事实证明,在一堆目录中,有一大堆完全无序,非标准化的文件名(手动完成的工作太多)。 最初,我的计划是使用一个简单的VBA脚本对前13个字符进行字符串比较,然后如果它们不匹配,则在前面放置一个具有理想日期格式(使用文档创建的日期)的字符串,但是然后我注意到已经存在几种模
1回复

VBA 中正则表达式组中的正则表达式

我来自这个问题: How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops 在那里找到了这个非常有用的链接: https : //www.experts-exchange.com/article