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

Exclude leading characters within 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)。我只想 trim 正则表达式中的前导零。

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

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

这里的技巧是 (?=\d{5}(.++)) 提前查看当前匹配点以确保存在 5 位数字(如您要求的那样),然后 (.++) 更进一步并捕获主题字符串的其余部分供以后测试。然后,潜在的前导“0”在捕获之外被消耗,留下 (?<part_x>\d+(?=)) 来匹配其余数字,再次向前看以验证它停止匹配较早捕获的 </code> 位置的数字,如下。</p> 然后应根据需要填充 <p>part_x 和 part_y。</p> <p>如果你想要一些概念上更容易理解的东西,你可以使用以下内容来匹配,例如,5 位数字和不带前导零的捕获:</p> <pre><code>(?|0([1-9]\d{3})|00([1-9]\d\d)|000([1-9]\d)|0000(\d))