按非字母的任何内容拆分数组



我有一个类,可以检查用户环境以找出他们是否已安装了python,类目的是检查用户是否已安装了Python的多个版本,并且不默认为三:

class CheckForPythonicVariables
  class << self
    def find_python_env_var
      py_path = []  # Results of the python env variables
      env_vars = ENV.to_h
      items = env_vars["Path"].split(";")  # Split the environment variables into an array
      items.each { |var|
        if var.to_s.include?("Python")  # Do you have python?
          py_path.push(var)
        end
      }
      py_path.each { |python|
        if python.include?("Python27")  # Python 2.7.x?
          return true
        elsif python.include?("Python3")  # Python 3.x.x?
          return false
        else
          raise "You do not have python installed"
        end
      }
    end
  end
end

现在这起作用,但仅在Windows上起作用,并且选择了几个Linux OS,显然Parrot不是其中之一。有什么方法可以通过任何不是字母来#split()环境变量?例如:

Windows env var: C:Python27;C:Python27Scripts;C:ProgramDataOracleJavajavapathParrot OS Env var:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

请注意,变量是如何通过半彩色(;)或结肠(:)拆分的,我是否可以在Ruby中使用#split()函数,而被任何不是字母数字字符或数字的东西分开的方法?还是有更好的方法来确保用户在其环境变量中具有python 2.7.x

此正则表达式匹配所有非alphanumeric字符:/[^a-zA-Z0-9]/

如果您想匹配所有非αLamumeric字符不包括 forward-slash and backSlash,请使用/[^a-zA-Z0-9/\]/

示例:

str = 'C:Python27;C:Python27Scripts;C:ProgramDataOracleJavajavapath'
str.split /[^a-zA-Z0-9/\]/
# => ["C", "\Python27\", "C", "\Python27\Scripts", "C", "\ProgramData\Oracle\Java\javapath"]
str = '/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games'
str.split /[^a-zA-Z0-9/\]/
# => ["/usr/local/bin", "/usr/bin", "/bin", "/usr/local/games", "/usr/games"]

您可以检查用户的当前python版本,如下:(源)

%x(python -c 'print __import__("sys").version_info < (2,8)') == "Truen"

但是,如果用户安装Python 3和Python 2.7,并且他们现在使用Python 3。脚本无法处理这种情况。

相关内容

  • 没有找到相关文章

最新更新