替换与特定正则表达式不匹配的字符

时间:2021-01-15 02:14:49

标签: ruby

我有以下来自 Amazon Web Services (AWS) 的正则表达式,这是实例名称所必需的:

^([\p{L}\p{Z}\p{N}_.:/=+-@]*)$

但是,我不确定一种更有效的方法来查找匹配此字符串的字符并将它们替换为一个简单的空格字符。

例如,字符串 Hello (World) 应替换为 Hello World (括号已替换为空格)。这只是与此字符串不匹配的字符的众多示例之一。

我能够做到这一点的唯一方法是使用以下代码:

first_test_string.split('').each do |char|
    if char[/^([\p{L}\p{Z}\p{N}_.:\/=+-@]*)$/] == nil
        second_test_string = second_test_string.gsub(char, " ")
    end
end

使用此代码时,我得到以下结果:

irb(main):037:0> first_test_string = "Hello (World)"
=> "Hello (World)"
irb(main):038:0> second_test_string = first_test_string
=> "Hello (World)"
irb(main):039:0>
irb(main):040:0> first_test_string.split('').each do |char|
irb(main):041:1*     if char[/^([\p{L}\p{Z}\p{N}_.:\/=+-@]*)$/] == nil
irb(main):042:2>         second_test_string = second_test_string.gsub(char, " ")
irb(main):043:2>     end
irb(main):044:1> end
=> ["H", "e", "l", "l", "o", " ", "(", "W", "o", "r", "l", "d", ")"]
irb(main):045:0> first_test_string
=> "Hello (World)"
irb(main):046:0> second_test_string
=> "Hello  World "
irb(main):047:0>

有没有另一种方法可以做到这一点,而不那么笨拙?我希望有一个解决方案,我可以只提供一个正则表达式字符串,然后只需查找所有与正则表达式字符串匹配的字符。

0 个答案:

没有答案
相关问题