排除正则表达式组中的前导字符
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))
我想从字符串中提取一个固定长度的组,然后忽略前导零。
示例:
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))