【发布时间】:2019-04-05 14:51:17
【问题描述】:
我想从字符串中删除这些字符["+", "-", "~"] 的所有实例,除非它们出现在字符串的开头。
例如:
"abc" => "abc"
"ab+c" => "abc"
"+abc" => "+abc"
"-+abc" => "-abc"
"ab+-c" => "abc"
注意第四个 + 被删除,因为它不是第一个字符。所以,如果一个字符串的开头有多个“不需要的”字符,我们只保留第一个。
我不太明白这个正则表达式的语法。任何人都可以帮忙吗?我正在使用 Ruby,但正则表达式语法 往往 跨语言是相同的。
【问题讨论】:
-
语言有所不同,因为 Ruby 正则表达式有些特定(尤其是在 string 匹配开始时)。到目前为止你有没有尝试过任何模式?
-
我试过了,但它没有改变字符串:
"+ab-c"..gsub(/^(![\+\-\~])/,"") -
请将其添加到问题中。
-
非正则表达式解决方案:
str[1..-1] = str[1..-1].delete('+~-') -
@Stefan 在 ruby 2.6+ 中我们现在可以使用
str[1..]代替str[1..-1]。另外 OP 小心使用'+~-'而不是'+-~'因为第一个将删除这 3 个字符,第二个将删除+(43) 和~(126) 之间的所有字符,因为查看了-在这种情况下引用一系列字符