我想从字符串中删除这些字符的所有实例["+", "-", "~"]
,除非它们出现在字符串的开头。
例如:
"abc" => "abc"
"ab+c" => "abc"
"+abc" => "+abc"
"-+abc" => "-abc"
"ab+-c" => "abc"
请注意,第四个字符中的 +
已被删除,因为它不是第一个字符。因此,如果字符串开头有多个“不需要的”字符,我们只保留第一个。
我不太明白这个的正则表达式语法。有人可以帮忙吗?我使用的是 Ruby,但正则表达式语法往往在不同语言中都是相同的。
最佳答案
^(![\+\-\~]
模式匹配行的开头,然后将 !
捕获到第 1 组中char 后面跟着 +
, -
或~
char,因此您只删除 !+
, !~
或!-
在一行的开头。
您可以使用
/(?!\A)[+~-]/
它匹配任何 +
, ~
或-
不在字符串 ( [+~-]
) 开头的 char ( (?!\A)
)。 (?!\A)
是一个否定的前瞻,如果其模式没有立即匹配到当前位置的右侧,则匹配失败。如果该位置位于字符串的开头(\A
正是该位置的 Assets ),则匹配失败。自 \A
是一个不消耗任何文本的 anchor ,即所谓的零长度模式,如果使用前向或后向没有区别,(?<!\A)
。
确保-
位于字符类的开头或结尾,您不必转义它。
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/