我想从字符串中删除这些字符["+", "-", "~"]
的所有实例,除非它们出现在字符串的开头。
例如:
"abc" => "abc"
"ab+c" => "abc"
"+abc" => "+abc"
"-+abc" => "-abc"
"ab+-c" => "abc"
请注意第四个删除+
,因为它不是第一个字符。因此,如果在字符串的开头有多个“不需要的”字符,我们只保留第一个字符。
我无法弄清楚这个的正则表达式语法。有人可以帮忙吗?我正在使用Ruby,但正则表达式语法在各种语言中都是相同的。
^(![\+\-\~]
模式匹配一条线的开始,然后捕获到第1组a!
char,然后是+
,-
或~
char,所以你只删除!+
,!~
或!-
在一行的开头。
你可以用
/(?!\A)[+~-]/
它匹配任何不在弦乐开头的+
,~
或-
char([+~-]
)((?!\A)
)。如果(?!\A)
的模式不能立即与当前位置的右侧匹配,那么\A
是一个负面的前瞻。如果位置在字符串的开头(\A
资产这个位置),则匹配失败。由于(?<!\A)
是一个不消耗任何文本的锚点,即所谓的零长度模式,如果你使用前瞻或后观,-
没有区别。
确保Ruby demo位于角色类的开头或结尾,你不必逃避它。
strs = ["abc", "ab+c", "+abc", "-+abc", "ab+-c"]
strs.each { |x| p x.gsub(/(?!\A)[-+~]/, "") }
:
"abc"
"abc"
"+abc"
"-abc"
"abc"
输出:
qazxswpoi