正则表达式(ruby)删除一组字符的所有实例,当它们位于字符串的开头时

问题描述 投票:2回答:1

我想从字符串中删除这些字符["+", "-", "~"]的所有实例,除非它们出现在字符串的开头。

例如:

"abc"   => "abc"
"ab+c"  => "abc"
"+abc"  => "+abc"
"-+abc" => "-abc"
"ab+-c" => "abc"

请注意第四个删除+,因为它不是第一个字符。因此,如果在字符串的开头有多个“不需要的”字符,我们只保留第一个字符。

我无法弄清楚这个的正则表达式语法。有人可以帮忙吗?我正在使用Ruby,但正则表达式语法在各种语言中都是相同的。

regex ruby
1个回答
5
投票

^(![\+\-\~]模式匹配一​​条线的开始,然后捕获到第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
© www.soinside.com 2019 - 2024. All rights reserved.