VBA RegEx否定

问题描述 投票:1回答:1

我正面临着正则表达式的问题。

我正在尝试获取未跟随厘米或英寸的数字,如下面的示例所示:

  1. 30.5 XXL Height 175.5 cm - 这应该只返回30.5,因为175.5附加了“cm”
  2. 34 inches XL 54 - 这应该只返回54,因为34英寸

我怎么能用正则表达式做到这一点?

regex regex-negation regex-lookarounds regex-group regex-greedy
1个回答
1
投票

使用负向前瞻(?!)

正则表达式:\d+(?:\.\d+)?(?=(?: (?!cm|inches)|$))

细节:

  • (?=)积极前瞻
  • (?:)非捕获组
  • (?!)否定前瞻
  • |
  • $在一条线的末尾断言位置

VBA代码:

Set re = CreateObject("VBScript.RegExp")
re.Global = True

re.Pattern = "\d+(?:\.\d+)?(?=(?: (?!cm|inches)|$))"
For Each Match In re.Execute("30.5 XXL Height 175.5 cm")
    Debug.Print (Match)
Next

输出:

30.5
© www.soinside.com 2019 - 2024. All rights reserved.