【问题标题】:VBA Excel and RegexpVBA Excel 和正则表达式
【发布时间】:2018-01-10 15:01:32
【问题描述】:

请您检查我的代码,看看为什么它没有给我想要的东西。我认为这是因为模式,但我不太确定。

    Function CleanStr(strIn As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
      .Pattern = "\([^)]*\)"
      .Global = True
      CleanStr = .Replace(strIn, vbNullString)
    End With
    End Function

我希望我的代码做的是清除括号内的字符串。所以给定像“values(delete)”这样的东西,我希望它只变成“values()”。但是我的代码所做的也是删除括号,从而使其成为“值”。

有人知道为什么会这样吗?

感谢您的帮助。

【问题讨论】:

  • 只需替换为()(而不是vbNullString)。
  • 正如 Wiktor 所说,只需替换为 ():CleanStr = .Replace(strIn, "()") 或使用 Gurman 的模式。

标签: regex excel vba


【解决方案1】:

发生这种情况是因为您的模式中的 \(\) 与左括号和右括号匹配。

改用这个作为模式:

[^()]*(?=\))

Click for Demo

说明:

  • [^()]* - 匹配 0+ 个既不是 ( 也不是 ) 的字符
  • (?=\)) - 正向前瞻以确保上述匹配必须后跟右括号 )

【讨论】:

  • @Link 如果对您有用,请选择它作为答案
猜你喜欢
  • 2012-01-14
  • 2016-01-13
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2019-01-08
  • 1970-01-01
相关资源
最近更新 更多