正则表达式捕获变量字符串中设置位置的字符

时间:2013-08-02 20:35:48

标签: regex

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

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

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

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

2 个答案:

答案 0 :(得分:3)

在不使用正则表达式的情况下执行此操作似乎要容易得多,但为了参数,您可以使用此模式:

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

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

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

两种模式都将匹配两个组中的2,4或6位数字,而不是其他任何模式。测试一下here

答案 1 :(得分:3)

您可以使用此模式:

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