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].*$)"
此外,:
不是特殊的正则表达式元字符,不需要转义。
如果您想确保 .
之后的字符不是数字,请在 \.
:
之后使用 [^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
所以这将只接受任何匹配的数字,直到文本开始。
我在 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].*$)"
此外,:
不是特殊的正则表达式元字符,不需要转义。
如果您想确保 .
之后的字符不是数字,请在 \.
:
[^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
所以这将只接受任何匹配的数字,直到文本开始。