gpt4 book ai didi

.net - 如果紧随其后的是特定字符,则正则表达式会丢弃整个捕获

转载 作者:行者123 更新时间:2023-12-01 02:03:12 26 4
gpt4 key购买 nike

给定以下文本:

somerandomtext06251/750/somerandomtext/21399/10 79/20 8301

如何提取 06251/750、79/20、8301 并忽略 21399/10?

一般规则:

  • 在随机字符串中匹配每组至少 2 位数字,后跟可选的/并后跟另外至少 2 位数字;对数字贪婪(尽可能多地获取)
  • 忽略紧接其前面的/的完整匹配

我从以下匹配模式开始:

 (?<invnr>\d{2,}/?\d{2,})

一般来说,它可以工作,但它只有一个问题:它还需要 21399/10。所以,我添加了一个负面的lookbehind:

 (?<!/)(?<invnr>\d{2,}/?\d{2,})

现在它忽略了 21399/10 的第一个数字(因为它前面有/),但它仍然捕获以下所有字符,即 1399/10。但我需要完全跳过 21399/10。

如何进行向后查找以删除整个匹配项并跳至下一个匹配项,而不是仅跳过一位数字?

最佳答案

您可以在否定后向查找中添加数字模式(通过使用字符类 / 将其与 [/\d] 组合),以确保如果它紧跟在数字后面,则不会发生匹配:

(?<![/\d])\d{2,}(?:/\d{2,})?

请参阅regex demo

详细信息

  • (?<![/\d]) - 如果存在 / 则匹配失败的负向后查找或当前位置左侧的数字
  • \d{2,} - 两位或更多数字
  • (?:/\d{2,})? - / 的可选序列以及两位或更多数字。

如果您需要确保仅匹配 ASCII 数字,请传递 RegexOptions.ECMAScript option到 .NET 方法内的正则表达式编译器,或使用 [0-9]而不是\d .

记下您的\d{2,}/?\d{2,}有点偏离,因为它不匹配 2 或 3 位数字序列,只能匹配 4 个以上数字序列。

关于.net - 如果紧随其后的是特定字符,则正则表达式会丢弃整个捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897672/

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