"abc" "ab+c" => "abc" "+abc" => -6ren">
gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:40 28 4
gpt4 key购买 nike

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

例如:

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

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

我不太明白这个的正则表达式语法。谁能帮忙?我正在使用 Ruby,但正则表达式语法倾向于在不同语言中是相同的。

最佳答案

^(![\+\-\~]模式匹配 line 的开头,然后捕获到组 1 a ! char 后跟 + , -~ char,所以你只删除 !+ , !~!-在一行的开头。

你可以使用

/(?!\A)[+~-]/

它匹配任何 + , ~-不在字符串开头的字符 ( [+~-] ) ( (?!\A) )。 (?!\A)是一个否定前瞻,如果它的模式没有立即匹配到当前位置的右侧,则匹配失败。如果位置位于字符串的开头(\A assets 这个位置),则匹配失败。自 \A是一个不消耗任何文本的 anchor ,即所谓的零长度模式,使用前向或后向没有区别,(?<!\A) .

确保-位于字符类的开头或结尾,您不必转义它。

Ruby demo :

strs = ["abc", "ab+c", "+abc", "-+abc", "ab+-c"]
strs.each { |x| p x.gsub(/(?!\A)[-+~]/, "") }

输出:

"abc"
"abc"
"+abc"
"-abc"
"abc"

关于正则表达式(ruby)删除一组字符的所有实例,除非它们位于字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55516945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com