我想从字符串中提取一个固定长度的组,但忽略前导零。
示例:
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)。我只想在正则表达式中以某种方式修剪前导零。
答案 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