通过任何非字母分割数组

时间:2016-12-30 12:26:37

标签: ruby environment-variables ruby-2.3 parrot-os

我有一个类会检查用户环境,以确定他们是否安装了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:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath Parrot OS env var:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

注意变量是如何用分号(;)或冒号(:)拆分的,有没有办法可以在ruby中使用#split()函数由任何非字母数字字符或数字分割?或者有更好的方法来确保用户的环境变量中有python 2.7.x吗?

2 个答案:

答案 0 :(得分:1)

您可以查看用户当前的python版本,如下所示:(source

@Provides

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

答案 1 :(得分:1)

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

如果要匹配排除正斜杠和反斜杠的所有非字母数字字符,请使用/[^a-zA-Z0-9\/\\]/

示例:

str = 'C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath'
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"]