首页 > 解决方案 > 如何使用正则表达式而不是其他包将版本字符串与最低版本号匹配?

问题描述

注意:这个问题不是关于解析版本字符串的可用库,也不是关于如何编写一般的正则表达式模式。我必须将模式输入 API 调用,所以使用另一个库对我来说不是一个选项。

我需要匹配一个版本字符串,例如 eg"9.3""12.5"针对最低版本号"11.2"。即"9.9"or"9.10"不能匹配 while "11.2""11.10"or "20.0"should 。

在 Pythonre中是否有合理的方法来实现这一点?使用这样的方法 导致这样的表达式

r"^(([2-9]\d|1[2-9])\.\d{1,}|11\.([2-9]|\d{2,}))(\.\d+)*$"

这是硬核阅读和灵活性。

在 2020 年,难道没有更简单或更通用的方式来处理 Python 中正则表达式中的十进制数(不是数字)吗?

也许表达式生成器采用更抽象的描述并生成表达式?

标签: pythonregex

解决方案


要匹配所有大于或等于 的整数和十进制数11,请使用以下正则表达式:

^[1-9][1-9](\d+)?\.?\d*

  • ^字符串的开头。
  • [1-9]第一个数字必须在1to 9(包括)范围内。
  • [1-9]第二位数也一样。
  • (\d+)?后面可能会有更多的数字。
  • \.?后面可能跟一个小数。
  • \d*小数部分可能后跟数字。

推荐阅读