
#01-01/01-02/01-03#,正则表达式(d{1,}-d{1,})[/#]提取上面的文本,为啥提取的数据是01-01/,01-02/,01-03#我正则表达式括号没有捕捉/#,结果又含/#。编程语言是VB

以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
这个问题涉及使用正则表达式从特定文本中提取模式。在您提供的情境下,关于正则表达式的解释和问题主要涉及到以下几点:
(d{1,}-d{1,})[/#] 看起来存在一些格式错误和不规范的语法。正确的格式应该是 \d{1,}-\d{1,}[/#]。这里 \d 用于匹配数字,{1,} 表示匹配一个或多个数字,[/#] 表示匹配字符“/”或“#”。但您似乎想要匹配的是数字之间的分隔符可能是“/”或“#”,并且想要捕获这个分隔符及其前后的数字部分。为了达到这个目的,您可能需要稍微调整正则表达式。(\d{1,}-\d{1,}/?#)。这样,括号内的整个模式都会被捕获。基于上述分析,如果您的目标是匹配类似 "01-01/"、"01-02#" 等模式,并捕获整个模式(包括分隔符),您可以尝试使用以下正则表达式:
(\d{1,}-\d{1,}(?:\/|#))
这里 (?:\/|#) 是一个非捕获组,用于匹配“/”或“#”,但不会单独捕获它们。这样,整个模式(数字-数字-分隔符)会被捕获。
在 VBA 中使用这个正则表达式的示例代码如下:
Sub MatchBank()
Dim regex As New RegExp
Dim text As String
text = "付款Strin-5/01-14/01-20#"
regex.Pattern = "(\d{1,}-\d{1,}(?:\/|#))"
regex.Global = True
Dim match As match, matches As MatchCollection
Set matches = regex.Execute(text)
For Each match In matches
Debug.Print match.Value
Next match
End Sub
这样,输出应该只包含您期望的匹配模式,如 "01-01/"、"01-14/" 等,不包含意外的字符。