用不是字母的任何东西拆分数组
Split the array by anything that isn't a letter
我有一个 class 将检查用户环境以查明他们是否安装了 python
,classes 的目的是检查用户是否有多个版本的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 和 select 少数 Linux OS
,显然 Parrot
不是其中之一。有没有办法可以通过任何不是字母的东西 #split()
环境变量?例如:
Windows 环境变量:C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath
鹦鹉 OS 环境变量:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
请注意变量是如何用分号 (;
) 或冒号 (:
) 分隔的,有没有办法在其中使用 #split()
函数ruby 并用非字母数字字符或数字的任何内容拆分?或者有没有更好的方法来确保用户在他们的环境变量中有 python 2.7.x
?
您可以检查用户当前的 python 版本,如下所示:(source)
%x(python -c 'print __import__("sys").version_info < (2,8)') == "True\n"
但是如果用户安装 python 3 和 python 2.7,并且他们现在使用 python 3。脚本无法处理这种情况。
此正则表达式匹配所有非字母数字字符:/[^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"]
我有一个 class 将检查用户环境以查明他们是否安装了 python
,classes 的目的是检查用户是否有多个版本的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 和 select 少数 Linux OS
,显然 Parrot
不是其中之一。有没有办法可以通过任何不是字母的东西 #split()
环境变量?例如:
Windows 环境变量:C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath
鹦鹉 OS 环境变量:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
请注意变量是如何用分号 (;
) 或冒号 (:
) 分隔的,有没有办法在其中使用 #split()
函数ruby 并用非字母数字字符或数字的任何内容拆分?或者有没有更好的方法来确保用户在他们的环境变量中有 python 2.7.x
?
您可以检查用户当前的 python 版本,如下所示:(source)
%x(python -c 'print __import__("sys").version_info < (2,8)') == "True\n"
但是如果用户安装 python 3 和 python 2.7,并且他们现在使用 python 3。脚本无法处理这种情况。
此正则表达式匹配所有非字母数字字符:/[^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"]