排除正则表达式组中的前导字符

时间:2017-10-23 11:54:53

标签: regex regex-group

我想从字符串中提取一个固定长度的组,但忽略前导零。

示例:

String: 1a2300245filler060403105543a
            ^^^^^      ^^^^^^

当前正则表达式:.{4}(?<part_x>[\d]{5})filler(?<part_y>[\d]{6})

这给了我:

part_x = 00245

part_y = 060403

Is there some way to remove the leading zeroes from the grouping to get this?

part_x = 245

part_y = 60403

请注意,part_x和part_y的初始长度是固定的(分别为5和6)。我只想在正则表达式中以某种方式修剪前导零。

1 个答案:

答案 0 :(得分:2)

选择性地匹配和捕获这样的重叠子表达式有点尴尬,但这是一个你可以在这个特殊情况下使用的技巧和类似的案例:

.{4}(?=\d{5}(.++))0{0,4}(?<part_x>\d+(?=\1))filler(?=\d{6}(.*+))0{0,5}(?<part_y>\d+(?=\3))

这里的技巧是(?=\d{5}(.++))在当前匹配点之前查看以确保存在5个数字(按照您的要求),但随后(.++)更进一步并捕获主题字符串的其余部分以供日后使用测试。然后,在捕获之外消耗潜在的前导消息,使(?<part_x>\d+(?=\1))与其余数字匹配,再次向前看以验证它是否在{{之前捕获的{1}}紧随其后。

然后应根据需要填充

part_x和part_y。

如果您想要在概念上更容易理解的内容,您可以使用以下内容来匹配,例如,5位数字并捕获而不带前导零:

\1