Python 单引号中的正则表达式版本

Python regex version in single quotes

鉴于下面的输入,我想要一个 Python 兼容的正则表达式,它的输出是第二个版本值...“8.20.233”。我已经尽力从许多搜索中拼凑出一个解决方案,但我似乎无法找到正确的组合。感谢观看。

cask 'logitech-options' do
  if MacOS.version <= :sierra
    version '7.14.77'
    sha256 'e4df55642e04139fc93d955e949bf736196a404ed067d87f8de7eb9ac9117ece'
  else
    version '8.20.233'
    sha256 '52427d5fa9f0e0508c3414906212774b7ae142450d6dcf90fe1a4d6b51449c67'
  end
import re

s = """cask 'logitech-options' do
  if MacOS.version <= :sierra
    version '7.14.77'
    sha256 'e4df55642e04139fc93d955e949bf736196a404ed067d87f8de7eb9ac9117ece'
  else
    version '8.20.233'
    sha256 '52427d5fa9f0e0508c3414906212774b7ae142450d6dcf90fe1a4d6b51449c67'
  end"""
result = re.findall(r"'([\d\.]*?)'", s)

print(result[1])

并输出:

8.20.233

编辑

如果您希望将 8.20.233 作为第一个匹配项,请按如下方式更改您的代码:

import re

s = """cask 'logitech-options' do
  if MacOS.version <= :sierra
    version '7.14.77'
    sha256 'e4df55642e04139fc93d955e949bf736196a404ed067d87f8de7eb9ac9117ece'
  else
    version '8.20.233'
    sha256 '52427d5fa9f0e0508c3414906212774b7ae142450d6dcf90fe1a4d6b51449c67'
  end"""
result = re.findall(r"else\s+version\s+'([\d\.]*?)'", s)

print(result[0])

您必须决定正则表达式的严格程度。几个例子:

rgx1 = re.compile(r"version +'(.+)'")              # Pretty loose.
rgx2 = re.compile(r"version +'(\d+\.\d+\.\d+)'")   # More strict.

而且您没有给我们足够的信息来明确区分输入文本中的两个版本号。这样做的适当方法取决于您的用例的具体情况。

rgx2.findall(TEXT)  # ['7.14.77', '8.20.233']