提问人:jbk 提问时间:3/9/2023 更新时间:3/9/2023 访问量:40
为什么 String#delete 没有从这个字符串中删除 '-' 字符
Why is String#delete not deleting the `-` char from this string
问:
我正在尝试使用该方法清理一些电话号码数据,但根据我在 irb 中的测试,当我在参数中以特定顺序显示“-”字符时,它只会删除它。#delete
"(941)979- 2000".delete(" -().")
仍然返回 - 现在;=> 而删除 -;=>"941979-2000"
"(941)979- 2000".delete(" ()-.")
"9419792000"
我对这种方法的参数要求有什么误解?
答:
2赞
Jörg W Mittag
3/9/2023
#1
根据 String#delete
的文档,字符选择器意味着: -().
- 和之间的任何字符(即 、 、 、 、 、 和 ) 或
(
!
"
#
$
%
&
'
(
)
或.
即此字符选择器选择的所有字符的集合为 、 、 、 、 和 。
!
"
#
$
%
&
'
(
)
.
而字符选择器意味着: ()-.
(
或- 和 之间的任何字符(即 、 、 、 和
)
.
)
*
+
,
-
.
)
即此字符选择器选择的所有字符集为 、 、 、 、 和
(
*
+
,
-
.
换言之,第一个字符选择器不选择字符,因为所选字符集中不存在 ,而第二个字符选择器选择该字符,因为所选字符集中存在 。-
-
-
-
在不知道您的确切要求的情况下,我的猜测是您真正想要的字符选择器是 or 或 simply 的东西。 \-().
()\-.
().-
评论
0赞
jbk
3/9/2023
啊哈,我现在完全明白@Jörg,我使用的破折号字符被解释为“在字符范围内的左字符和右字符之间”,愚蠢的我🤪.我本来应该想逃避的。非常感谢您非常清晰且写得很好的答案。
0赞
Cary Swoveland
3/10/2023
转义连字符似乎没有效果:我得到的结果与 如果要将连字符视为要删除的字符之一,则不应将连字符放在字符串的开头或结尾吗?" \-()."
" -()."
上一个:在 Ruby 中转换为 JSON
下一个:从整数中选择重复数字的字符串
评论