VBA 奇怪的 RegEx 问题

VBA Strange RegEx Issue

我在 Excel 中使用 Visual Basic 来更改一些数据

模式:

"^(" & Chr(167) & "\s)(\d+\:\d+)\.(\w+.*$)"

在某些情况下,文本是:

§ 34:149.Lorem ipsum dolor sit amet

我想把文字分成

34:149 在当前单元格中,然后在下一列中 "Lorem ipsum dolor sit amet"

我遇到的问题是给定值如下所示:

§ 53:178.40

RegEx returns 这个: 53:178 作为一组,然后 .40 作为另一组

我无法获得返回的子表达式组的一致性,因为 nnn:nnn.nn, .nn 作为附加组返回,而不是已经描述的组的成员。

我对这里的操作感到困惑。我错过了一些东西, 因为我希望 NN:NN.NN 形式的任何条目都被拒绝为匹配项。

经过 40 分钟的反复试验,我无法找出故障。

RegEx 代码片段是:

strPattern = "^(" & Chr(167) & "\s)(\d+\:\d+)\.(\w+.*$)"
replaceString = ""
replaceString = ""
replaceString2 = ""

RE.Global = True
RE.MultiLine = True
RE.IgnoreCase = False
RE.pattern = strPattern

result1 = RE.Replace(source, replaceString)
result2 = RE.Replace(source, replaceString2)

\w 也匹配数字。使用 [a-zA-Z] 来匹配任何 ASCII 字母(你甚至不需要在它后面加上 +):

"^(" & Chr(167) & "\s)(\d+:\d+)\.([a-zA-Z].*$)"

regex demo

此外,: 不是特殊的正则表达式元字符,不需要转义。

如果您想确保 . 之后的字符不是数字,请在 \.:

之后使用 [^0-9]\D
^(§\s)(\d+:\d+)\.(\D.*)

参见 this regex demo。如果它不能是空格,请使用

^(§\s)(\d+:\d+)\.([^\d\s].*)

参见 another demo

使用类似 ^(§\s)([0-9:.]*)\.(\w+.*$) 的模式参见 https://regex101.com/r/VGg7TJ/2

所以这将只接受任何匹配的数字,直到文本开始。