【发布时间】:2021-04-18 23:49:36
【问题描述】:
考虑以下字符串:
Wohnfläche angeblich: ca. 140 m²
Wohn/Nutzfläche ca. 211 m², renovie
Ca. 1111 gebautes und ab 222 umgebautes, etc , etc, ca. 144 m²
Ca. 71 m² große, etc (etc. ca. 1234)
在每种情况下,我都想使用适用于 VBA 的正则表达式模式提取 m² 值,即 140、211、144、71。
我遇到的问题是我找不到正确的正则表达式模式来懒惰地回溯(如果术语错误,请道歉)以仅获得最短的匹配,即紧接在 m² 之前和 Ca.|ca 之后的数字。
我目前正在尝试:
ca\.\s(.*?)\s(?=m²)
带有标志|设置:多行 False、全局 False 和 ignoreCase True。
第三种情况是匹配过长的字符串:
Ca. 1111 gebautes und ab 222 umgebautes, etc , etc, ca. 144
代替:
ca. 144
鉴于 VBA 在外观方面的局限性,有没有办法获得所需的值?
例如失败:
Option Explicit
Public Sub test()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
With re
.Global = False
.MultiLine = False
.IgnoreCase = True
.Pattern = "ca\.\s(.*?)\s(?=m²)"
End With
Debug.Print re.Execute("Ca. 1111 gebautes und ab 222 umgebautes, etc , etc, ca. 144 m²")(0).submatches(0)
End Sub
临时解决方法不够具体,因为它忽略了 ca.|Ca。要求"\s([0-9.]+)\sm²"
【问题讨论】: