我如何剥离空间&特定位置的字符串中的特殊字符? - Ruby

时间:2012-05-26 06:52:15

标签: ruby regex

说我有这样的字符串:

May 12 -

我想要最终得到的是:

May 12

我尝试了gsub(/\s+\W/, ''),它可以删除尾随空格和最后一个连字符。

但我不确定如何删除M之前的第一个空格。

思想?

3 个答案:

答案 0 :(得分:1)

使用.strip!你的结果。

" May 12".strip!  # => "May 12"

答案 1 :(得分:1)

使用match代替gsub (即提取相关字符串,而不是尝试剥离不相关的部分),使用正则表达式/\w+(?:\W+\w+)*/

" May 12 - ".match(/\w+(?:\W+\w+)*/).to_s # => "May 12"

请注意,这比使用gsub更有效率 - 将match正则表达式与the suggested gsub regex进行对比,我得到了这些基准(重复500万次):

                      user     system      total        real
match:           19.520000   0.060000  19.580000 ( 22.046307)
gsub:            31.830000   0.120000  31.950000 ( 35.781152)

添加gstrip!步骤as suggested并未显着改变这一点:

                      user     system      total        real
match:           19.390000   0.060000  19.450000 ( 20.537461)
gsub.strip!:     30.800000   0.110000  30.910000 ( 34.140044)

答案 2 :(得分:0)

怎么样:

/^\s+|\s+\W+$/

<强>解释

/         : regex delim
^         : begining of string
  \s+     : 1 or more spaces
  |       : OR
  \s+\W+  : 1 or more spaces followed by 1 or more non word char
$         : end of string
/         : regex delim