gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:09:00 25 4
gpt4 key购买 nike

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

例子:

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)。我只想以某种方式修剪正则表达式中的前导零。

最佳答案

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

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

这里的技巧是 (?=\d{5}(.++))在当前匹配点之前查看以确保存在 5 位数字(如您要求的那样),然后 (.++)更进一步并捕获主题字符串的其余部分以供以后测试。然后,潜在的前导“0”在捕获之外被消耗,留下 (?<part_x>\d+(?=\1))匹配其余数字,再次向前看以验证它停止匹配 \1 位置的数字,较早捕获,随后。

然后应根据需要填充 part_x 和 part_y。

如果你想要一些概念上更容易理解的东西,你可以使用下面的来匹配,例如,5 位数字和不带前导零的捕获:

(?|0([1-9]\d{3})|00([1-9]\d\d)|000([1-9]\d)|0000(\d))

关于regex - 排除正则表达式组中的前导字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com