【问题标题】:Excel VBA regex pattern giving error '5018'Excel VBA 正则表达式模式给出错误'5018'
【发布时间】:2021-06-28 05:02:40
【问题描述】:

我正在尝试使用以下正则表达式从产品详细信息中提取尺寸..

With rgx
    .Global = True
    .MultiLine = False
    .Pattern = "([0-9.,*?/]+{1,5}\s*(g|G|ML|ml|mL|Ml|oz|OZ|Oz|ea|\s+)){1,3}"
    
    Set temp = .Execute(Rng)

但是,在执行正则表达式时,我在 Set temp = .Execute(Rng) 行中遇到 5018 错误 为什么我在正则表达式中遇到这个错误?

【问题讨论】:

  • 什么是Rng?请发布一个可重现的示例。
  • 试试.Execute(Rng.Value2)
  • Rng 是单元格值示例值可以是 Size:1.70 oz, size:100ml, size 10.5g 或 size:100 ml + 50 ml
  • 但是+{1,5} 也是错误的语法。在这种情况下,+ 是不可量化的。您可能只想一起删除“+”。再说一次,如果你多解释一下你想要什么,这里可能会有更好的模式。

标签: excel regex vba


【解决方案1】:

this post 中所述,5018 代表“正则表达式中的意外量词”

查看[0-9.,*?/]+{1,5},其中有+{1,5},连续两个量词。

在 VBA 正则表达式中,这是一个错误。

如果您匹配属于 [0-9.,*?/] 集的 1 到 5 个字符,请使用 [0-9.,*?/]{1,5}

如果匹配一个或多个,请使用[0-9.,*?/]+

不要链接量词

【讨论】:

  • 感谢您的详细解释。如果我想捕获 100 ml + 20 ml 的大小,请澄清一下,它的模式(正则表达式)是什么?
  • @Linga 你的表情看起来不错,注意如何在stackoverflow.com/questions/44979363/… 提取所有匹配项。像(\d+(?:[,.]\d+)*)\s*(g|G|ML|ml|mL|Ml|oz|OZ|Oz|ea) 这样的表达式可以为你工作。
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2018-11-13
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多