【问题标题】:Regex to capture characters at set positions in a variable string正则表达式捕获变量字符串中设定位置的字符
【发布时间】:2013-08-02 20:35:48
【问题描述】:

我什至不确定这是否可以使用正则表达式,但情况如下:我有一个长度可以是 2、4 或 6 个字符的字符串。字符是成对的数字(例如:01 或 0125 或 012589)。

我需要三个表达式来捕获前两个数字(上例中的“01”)、中间数字(“25”)和最后两个“89”(同样,这些只是示例,可以是介于0 和 9)。

表达式必须符合字符串的受限制字符长度(必须是 2、4 或 6 个字符 - 1、3、5、7 或更多字符不会导致匹配)。此外,捕获最后两位数字的表达式不能匹配 4 个字符串的最后两位数字。最后两位数字仅对 6 个字符的字符串有效。同样,中间捕获只对 4 或 6 个字符的字符串有效。

我不能为此使用代码,只能使用正则表达式。

【问题讨论】:

    标签: regex


    【解决方案1】:

    你可以使用这个模式:

    (?<!\d)(?<first>[0-9]{2})(?:(?<middle>[0-9]{2})(?<last>[0-9]{2})?)?(?!\d)
    

    【讨论】:

      【解决方案2】:

      不使用正则表达式似乎更容易做到这一点,但为了论证,你可以使用这种模式:

      ^(\d\d)(\d\d)?(\d\d)?$
      

      或者这种模式,它实际上只有一个捕获组,这可能更容易使用,具体取决于您的代码:

      ^(\d\d){1,3}$
      

      两种模式都将匹配 2、4 或 6 位数字,每组两位,仅此而已。测试一下here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 2016-12-15
        相关资源
        最近更新 更多