【问题标题】:How to use python regular expression inside if... else... statement?如何在 if...else... 语句中使用 python 正则表达式?
【发布时间】:2015-12-24 08:46:14
【问题描述】:

我的 Python 脚本:

import wget

if windowsbit == x86:
    url = 'http://test.com/test_windows_2_56_30-STEST.exe'
    filename = wget.download(url)
else:
    url = 'http://test.com/test_windows-x64_2_56_30-STEST.exe'
    filename = wget.download(url)

在上面的 python 脚本中,我使用wget 模块来下载文件形式的 URL,基于 windows 32 位或 64 位。它按预期工作。

我想用正则表达式来做以下事情:

如果是windowsbit == x86,则应下载以test_windows 开头并以STEST.exe 结尾的文件。 否则它应该下载以test_windows-x64 开头并以STEST.exe 结尾的文件。

我是 python 新手,我不知道如何做到这一点。有人可以指导我吗?

【问题讨论】:

  • 当你说它工作时,你的意思是你的条件工作,但文件没有下载?
  • @idjaw 我的意思是,能够下载文件,条件正常。但是我想放正则表达式,这样如果将来版本号发生变化,我的脚本就可以处理这个。
  • 这看起来不像是正则表达式问题。您似乎没有办法查询网络服务器以找到“最新”版本的链接(如您的评论中所示),并且您不能像在 shell 脚本中那样使用正则表达式作为通配符(例如mv *.jpg images/)。
  • @亚当·史密斯。有没有办法告诉在 python 中下载特定文件的最新版本?
  • 你应该考虑类似:filename = "STEST.exe"; cur_version = "2_56_30"; base_url = "http://test.com/test_windows"; if windowsbit == x64: base_url += "-x64"; final_url = "{base}_{version}-{filename}".format(base=base_url, version=cur_version, filename=filename)

标签: python python-2.7


【解决方案1】:

这看起来不可能。与您尝试执行的操作相匹配的正则表达式类似于:

import re

urlre = re.compile("""
    http://test.com/test_windows    # base URL
    (?P<bit>-x64)?                  # captures -x64 if present
    _(?P<version_major>\d+)         # captures major version
    _(?P<version_minor>\d+)         # captures minor version
    _(?P<version_revision>\d+)      # captures revision version
    -STEST.exe                      # ending filename""", re.X)

但是你不能把它扔到wget。您不能在请求中使用通配符——网络服务器必须知道如何处理它们,而它不知道。更好的方法可能是:

base_url = "http://test.com/test_windows"
if windowsbit == x64:
    base_url += "-x64"
version = "2_56_30"
filename = "STEST.exe"

final_url = "{base}_{version}-{filename}".format(
    base=base_url, version=version, filename=filename)

【讨论】:

  • 感谢您的回答。拿那个 url 只包含两个文件。一个用于 32 位,另一个用于 64 位。我的意思是总是删除旧文件,并且该网址中只会有新文件。始终 32 位文件将以 test_windows 开头并以 STEST.exe 结尾。并且 64 位文件将以 test_windows-x64 开头并以 STEST.exe 结尾。在这种情况下,我们可以使用正则表达式对吗?
  • @Kumar 那么你的新问题应该是“我如何询问网络服务器是否存在基于通配符的文件”
  • 谢谢,我会按照你说的添加新问题。感谢您的帮助
【解决方案2】:

可以在没有正则表达式的情况下试试这个:

import wget

text ="http://test.com/test_windows"

if windowsbit == x86:
    url = '{}_2_56_30-STEST.exe'.format(text)
else:
    url = '{}-x64_2_56_30-STEST.exe'.format(text)
filename = wget.download(url)

有版本:

import wget

text ="http://test.com/test_windows"
version = '2_56_30'

if windowsbit == x86:
    url = '{}_{}-STEST.exe'.format(text,version)
else:
    url = '{}-x64_{}-STEST.exe'.format(text,version)
filename = wget.download(url)

【讨论】:

  • OP 的问题来自于尝试考虑较新的版本。
  • @Randomazer。感谢您的回答。有什么方法可以将“version = '2_56_30'”保留为可选。因为它不会总是固定的数字。它会不断变化。
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 2018-06-21
  • 1970-01-01
  • 2013-12-10
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
相关资源
最近更新 更多