ruby 如何使用这行gsub(/\s+/,“”)

px9o7tmv  于 12个月前  发布在  Ruby
关注(0)|答案(3)|浏览(73)

我有这个整数我想删除空间和删除+966

str = '+9660556546509'.gsub(/\s+/, "", "+966")

puts str

这个错误出现了

bundle exec ruby main. rb
main.rb:1:in gsub': wrong number of argumen
ts (given 3, expected 1..2) (ArgumentError)
from main.rb:1:in
<main>!
exit status 1
ki1q1bka

ki1q1bka1#

用这种方式

str = '+9660556546509'.gsub(/\s+/, '').gsub('+966', '')

输出

0556546509
kzipqqlq

kzipqqlq2#

由于字符串不包含空格,因此无需删除它们
要删除前缀,可以使用String#delete_prefix

str = "+9660556546509"
str.delete_prefix("+966") # => "0556546509"

还有bang版本:

str.delete_prefix!("+966")
str # => "0556546509"

如果你的字符串包含白色空格,你可以先用String#delete删除它们,然后再用delete_prefix

str = " +9 66 055 654 65 09  "
str.delete(" ").delete_prefix("+966") # => "0556546509"
uurv41yg

uurv41yg3#

人们可以写

" + 9  6 6 0556 546 509".gsub(/\+ *9 *6 *6| */, '')
  #=> "0556546509"

Demo
我假设不匹配换行符,这就是为什么我选择匹配空格而不是空白字符(\s)。如果制表符也应该匹配,可以用[ \t]\p{Blank}替换空格字符。
正则表达式可以通过以 * 自由间距模式 * 编写来实现自文档化。

/
\+     # match '+'
[ ]*9  # match zero or more spaces followed by '9'
[ ]*6  # match zero or more spaces followed by '6'
[ ]*6  # match zero or more spaces followed by '6'
|      # or
[ ]*   # match zero or more spaces
/x     # invoke free-spacing regex definition mode

使用此模式时,必须保护表达式中的所有空格。我已经通过将每个空格封闭在一个字符类中来实现这一点,但也可以对每个空格字符进行转义(\)。

相关问题