gpt4 book ai didi

regex - 带有捕获组的 RegEx 中的空格问题

转载 作者:行者123 更新时间:2023-12-04 23:30:42 24 4
gpt4 key购买 nike

我有一个正则表达式,我试图将其与以下类型的数据进行匹配,每个标记由未知数量的空格分隔。

更新 : "Text"几乎可以是任何字符,这就是为什么我有 .*最初。重要的是,它还可以包含空格。

  • 正文
  • 正文 01
  • 文本 01 of 03
  • 文本 01 (of 03)
  • 短信01-03

  • 我想将“文本”、“01”和“03”作为单独的组捕获,除“文本”之外的所有组都是可选的。到目前为止我能做的最好的是:
    \s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)

    这匹配#3-#5,并将它们放入适当的捕获组中。但是,我不知道为什么当我添加一个额外的 ? 时到最后制作 01之后的表达式部分可选,我的捕获组变得很时髦。
    \s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)?

    上面的 RegEx 匹配 #2-#5,但捕获组仅适用于 #2 和 #5。

    这似乎是一个简单的正则表达式,所以我不知道为什么我遇到了这么多麻烦。

    这是我用来帮助调试的在线 RegEx 评估器的链接: http://regexr.com?2tb64 .该链接已经有第一个 RegEx 和填充的测试数据。

    最佳答案

    你没有说你使用的是哪个正则表达式工具,所以我假设最小公分母,即 Javascript。这是一个有效的方法:

    var re = /^\s*(.+?)(?:\s+(\d+)(?:(?:\s+\(?of\s+|-)(\d+)\)?)?)?$/i;

    要在您的 Regexr 工具中使用此功能,请务必打开“多行选项”。

    在 PHP 语法中也是一样的(有很多有趣的注释!):

    $re = '/ # Always write non-trivial regex in free-space mode!
    ^ # Anchor to start of string.
    \s* # optional leading whitspace is ok.
    (.+?) # Text can be pretty much anything.
    (?: # Group to allow applying ? quantifier
    \s+ # WS separates "Text" from first number.
    (\d+) # First number.
    (?: # Group to allow applying ? quantifier
    (?: # Second number prefix alternatives
    \s+\(?of\s+ # Either " of 03" and " (of 03)",
    | - # or just a dash for "-03" case.
    ) # End second number prefix alternatives
    (\d+) # Second number
    \)? # Match ")" for " (of 03)" case.
    )? # Second number is optional.
    )? # First numebr is optional.
    $ # Anchor to start of string.
    /ix';

    关于regex - 带有捕获组的 RegEx 中的空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358585/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com