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

标签 regex ruby

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

例如:

"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)

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

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/

相关文章:

javascript - characterEncoding是什么意思

ruby - 确保字符串是时间或日期格式?

ruby-on-rails - Rails 分页 - 更快地计算总页数?

ruby - 执行操作直到满足条件

php - "Self Healing"的 OO 模式和/或结构化方法?

Java 正则表达式模式匹配任何字符序列后第一次出现的 “boundary”

php - 在 php 中将 html 属性与正则表达式匹配

javascript - 正则表达式用于检查字符串是否不应包含某些单词,但如果这些单词前面有 'to' 或 'for' 则可以

ruby-on-rails - GemNotFoundException 异常

ruby-on-rails - 如何从 JSON 响应中提取召唤师名称?