我想["+", "-", "~"]从字符串中删除这些字符的所有实例,除非它们出现在字符串的开头。
例如:
"abc" => "abc"
"ab+c" => "abc"
"+abc" => "+abc"
"-+abc" => "-abc"
"ab+-c" => "abc"
Run Code Online (Sandbox Code Playgroud)
请注意,第四个+字符已删除,因为它不是第一个字符。因此,如果字符串的开头有多个“不需要的”字符,则我们仅保留第一个字符。
我对此不太了解正则表达式的语法。有人可以帮忙吗?我使用的是Ruby,但正则表达式的语法在各种语言中趋于相同。
该^(![\+\-\~]模式的开始匹配线,然后捕获到组1中的!字符,随后用+,-或~字符,所以你只删除!+,!~或者!-在一个行的开始。
您可以使用
/(?!\A)[+~-]/
Run Code Online (Sandbox Code Playgroud)
它匹配任何+,~或-字符([+~-]即不在该字符串的开头() (?!\A))。该(?!\A)是负先行失败的比赛,如果它的模式不匹配,立即到当前位置的右侧。如果位置在字符串的开头(\A此位置就是资产),则匹配失败。由于\A是不消耗任何文本的锚点,即所谓的零长度模式,因此,如果使用前向或后向,则没有区别(?<!\A)。
确保-它位于字符类的开始或结尾,而不必逃脱它。
strs = ["abc", "ab+c", "+abc", "-+abc", "ab+-c"]
strs.each { |x| p x.gsub(/(?!\A)[-+~]/, "") }
Run Code Online (Sandbox Code Playgroud)
输出:
"abc"
"abc"
"+abc"
"-abc"
"abc"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |