weixin_52376536 2025-01-19 12:11 采纳率: 50%
浏览 6

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

img


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

  • 写回答

3条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题涉及使用正则表达式从特定文本中提取模式。在您提供的情境下,关于正则表达式的解释和问题主要涉及到以下几点:

    1. 正则表达式的构造:您使用的正则表达式 (d{1,}-d{1,})[/#] 看起来存在一些格式错误和不规范的语法。正确的格式应该是 \d{1,}-\d{1,}[/#]。这里 \d 用于匹配数字,{1,} 表示匹配一个或多个数字,[/#] 表示匹配字符“/”或“#”。但您似乎想要匹配的是数字之间的分隔符可能是“/”或“#”,并且想要捕获这个分隔符及其前后的数字部分。为了达到这个目的,您可能需要稍微调整正则表达式。
    2. 括号的作用:括号在正则表达式中用于捕获匹配的子字符串。如果您的目标是捕获形如 "01-01/" 这样的完整模式,那么您需要在整个模式周围使用括号,如 (\d{1,}-\d{1,}/?#)。这样,括号内的整个模式都会被捕获。
    3. 提取结果包含意外字符的问题:您提到提取的数据包含不必要的字符(如逗号),这可能是因为正则表达式匹配的部分包含了这些字符,或者是在提取后处理字符串时添加了这些字符。确保您的正则表达式只匹配您想要的部分,并且在提取后检查和处理结果字符串。

    基于上述分析,如果您的目标是匹配类似 "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/" 等,不包含意外的字符。

    评论

报告相同问题?

问题事件

  • 修改了问题 1月19日
  • 创建了问题 1月19日