VBA奇怪的RegEx问题

时间:2018-11-26 09:50:31

标签: regex excel vba regex-group regex-greedy

我正在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返回以下内容: 53:178作为一组,然后.40作为另一组

我无法在返回的子表达式组上保持一致,因为使用nnn:nnn.nn, .nn作为附加组而不是已经描述的组的成员来返回。

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

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

RegEx代码段为:

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

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

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

2 个答案:

答案 0 :(得分:2)

dataview也匹配数字。使用\w来匹配任何ASCII字母(您甚至不需要[a-zA-Z]

+

请参见regex demo

此外,"^(" & Chr(167) & "\s)(\d+:\d+)\.([a-zA-Z].*$)" 不是特殊的正则表达式元字符,不需要转义。

如果要确保:之后的字符不是数字,请使用.之后的[^0-9]\D

\.

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

^(§\s)(\d+:\d+)\.(\D.*)

请参见another demo

答案 1 :(得分:1)

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

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