7

如果需要,我正在尝试添加斜杠:

a = '/var/www'
a.gsub
...

我不知道该怎么做。

4

8 回答 8

25
a = File.join(a, "")

Swift,简单,并且具有保证a以路径分隔符结尾的效果;也就是说,无论a"/var/www"还是,它都会给出相同的结果"/var/www/"

这与上面 Joe White 的评论相同;我不知道他为什么不提交它作为答案,因为它应该是一个。

奇怪的是,Pathname 库没有提供一种方便的方式来做同样的事情。

于 2012-09-12T17:48:42.430 回答
14

这是一个更具可读性的版本

path << '/' unless path.end_with?('/')
于 2012-01-30T21:33:12.460 回答
2

为什么要使用gsub

  1. 您没有进行替换(不会从字符串中删除任何内容)
  2. 如果您要替换,并且只需要在一个地方完成,请使用subnot gsub
  3. 如果您正在替换,并且想要修改字符串,请使用sub!or gsub!

由于您不进行替换,因此只需在需要时附加斜杠:

path << '/' if path[-1] != '/' # Make sure path ends with a slash

更新:为了使它与旧版本的 Ruby (1.8.x) 兼容,稍微修改一下:

path << '/' if path[-1].chr != '/' # Make sure path ends with a slash
于 2010-08-13T13:47:28.127 回答
1

您可以使用.chomp('/')删除可选的尾随/,然后.concat('/')再次附加斜杠。

'/var/www/'.chomp('/').concat('/')   # => "/var/www/"
'/var/www'.chomp('/').concat('/')    # => "/var/www/"
于 2019-04-25T11:24:24.073 回答
0
"/var/www".gsub(/[^\/]$/, '\1/')  #=> "/var/www/"
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/"
于 2010-08-13T14:14:57.410 回答
0

以下脚本显示了如何做到这一点:

a="/var/www";
print a + "\n";
a = a.gsub(/([^\/]$)/, '\1/');
print a + "\n";
a = a.gsub(/([^\/]$)/, '\1/');
print a + "\n";

它输出:

/var/www
/var/www/
/var/www/

/并通过用相同的字符加上尾随替换该行的最后一个字符(如果它不是 a )来工作/

于 2010-08-13T13:07:29.083 回答
0

已经涵盖了几种不同的方法,可以通过另一种方法进行混合:

(a << '/').gsub!('//','/')

或者

(a << '/').squeeze('/')

值得注意的是,尽管这两种情况都会将字符串中任何位置的 '//' 转换为 '/',但如果您只是处理路径,则不太可能导致问题。

于 2010-08-13T13:58:24.340 回答
0

非常简单的 gsub,作为单行比串联 (<<) 更容易

a = '/var/www'
a.gsub('/?$', '/')

这只是/在字符串的末尾找到一个可选字符并表示

于 2015-07-01T20:26:54.493 回答