【问题标题】:How to match version substring within overall string如何匹配整个字符串中的版本子字符串
【发布时间】:2022-11-30 02:29:36
【问题描述】:

我正在尝试以 v###.##.### 或版本 #.##.### 的形式将版本子字符串与正则表达式匹配。版本号的数量无关紧要,在 v 或版本之后可能有也可能没有空格。到目前为止,这是我正在尝试的,但在某些情况下不匹配:

\bv\s?[\d.]*\b|\bversion\s?[\d.]*\b

例如,它匹配“版本 6.2.11”但不匹配 c2000_v6.2.11。我对正则表达式比较陌生,不确定我在这里做错了什么。我很确定还有更好的方法来完成“或”部分,所以我们将不胜感激,谢谢!

【问题讨论】:

  • [\d.]* 用于匹配版本号是错误的(例如它将匹配连续 5 个点),\d+(\.\d+)* 会更准确

标签: python regex


【解决方案1】:

首先,通过实现可选的非捕获组可以大大缩短您的模式,这样就可以在不需要交替的情况下匹配v 或version。

接下来,第一个 需要一个字边界,但版本信息在第二个预期匹配中的 _ 之后开始,而 _ 是一个字字符。

您可以使用

(?<![^W_])v(?:ersion)?s?[d.]*

请参阅regex demo。

细节:

  • (?&lt;![^W_]) - 紧靠左边,不能有字母或数字
  • v - 一个v 字符
  • (?:ersion)? - 一个可选的ersion 字符串
  • s? - 一个可选的空格
  • [d.]* - 零个或多个数字或点
  • - 单词边界。

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2011-03-20
    • 1970-01-01
    • 2021-11-22
    • 2019-06-26
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多