【问题标题】:Golang regex : Ignore multiple occurrencesGolang 正则表达式:忽略多次出现
【发布时间】:2022-10-13 18:17:00
【问题描述】:

我有一个简单的需求。 给出这个输入(字符串):10 20 30 40 65 45 44 67 100 200 65 40 66 88 65

我需要得到 65 到 66 之间的所有数字。 问题是当我们多次出现每个限制时。 使用像 : (65).+(66) 这样的正则表达式,我捕获了 65 45 44 67 100 200 65 40 66。但我只想得到 40 个。

我怎么能做到这一点?

https://regex101.com/r/9HoKxr/1

谢谢 !

溴,

加布里埃尔

【问题讨论】:

  • 为此,通常使用经过调和的贪婪令牌,但它需要使用前瞻。在 RE2 正则表达式风格中处理这种情况并不容易。也许您想要的只是在66 之前获得65 的最后一个实例? .*65(.*?)66?

标签: regex go


【解决方案1】:

听起来您想在模式编号中排除匹配的“65”,直到第一次出现“66”?这有点冗长,但怎么样:

65s((?:d|[1-5]d|6[0-47-9]|d{3,})(?:s(?:d|[1-5]d|6[0-46-9]|d{3,}))*?)s66

在线查看demo


  • 65s - 在单词边界和空白字符之间以“65”开头;
  • ( - 打开捕获组;
    • (?:d|[1-5]d|6[0-46-9]|d{3,}) - 非捕获组到除 '65' 或 '667' 之外的任何整数;
    • (?:s(?:d|[1-5]d|6[0-46-9]|d{3,}))*? - 另一个非捕获组与嵌套非捕获组匹配空白字符以尽可能少地匹配除“65”之外的任何数字;
    • ) - 关闭捕获组;
  • s66 - 匹配另一个空格,后跟“66”和字边界。

【讨论】:

  • 对我来说这是一个新的学习,支持 d[0-9] 都支持,非常好的答案,干杯。
  • 谢谢@RavinderSingh13。我希望我正确地解释了这个问题。
  • 你们的正则表达式大师@JvdV 一如既往地快速和纠正正则表达式,temo 评论欢呼。
猜你喜欢
  • 2017-05-25
  • 2013-09-29
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多