2

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

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

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

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

4

2 回答 2

3

您可以使用此模式:

(?<!\d)(?<first>[0-9]{2})(?:(?<middle>[0-9]{2})(?<last>[0-9]{2})?)?(?!\d)
于 2013-08-02T20:45:47.397 回答
3

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

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

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

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

两种模式都将匹配 2、4 或 6 个数字,以两个为一组,仅此而已。在这里测试一下。

于 2013-08-02T20:38:51.163 回答