Select 正则表达式中的字符串 ruby

Select a string in regex with ruby

我必须清理传入参数的字符串,并删除所有小写字母和除 :

之外的所有特殊字符

所以我在参数中传递了这个字符串:

aA azee + B => C=

我需要清理这个字符串才能得到这个结果:

A + B => C

我愿意

string.gsub(/[^[:upper:][+|^ ]]/, "")

输出:"A + B C"

我不知道如何 select =>(以及 <=>)字符串与 ruby)

中的正则表达式

我知道如果我将 string.gsub(/[^[:upper:][+|^ =>]]/, "") 添加到我的正则表达式中,最后的 = 在我传入的参数字符串中也会被 selected

您可以尝试另一种方法:匹配您想要 保留 的所有内容,然后合并结果。

您可以使用此正则表达式来匹配您想要保留的所有内容:

[A-Z\d+| ^]|<?=>

如您所见,这只是使用 |[] 创建要保留的字符串列表:大写字母、数字、+、|、space , ^, => 和 <=>.

示例:

"aA azee + B => C=".scan(/[A-Z\d+| ^]|<?=>/).join()

输出:

"A  + B => C"

注意"A"和“+”之间有2个连续的space。如果你不想,你可以打电话给 String#squeeze.

See regex in use here

(<?=>)|[^[:upper:]+|^ ]
  • (<?=>)<=>=> 捕获到捕获组 1
  • [^[:upper:]+|^ ] 匹配任何不是大写字母的字符(与 [A-Z] 相同)或 +|^ 或 space

See code in use here

p "aA azee + B => C=".gsub(/(<?=>)|[^[:upper:]+|^ ]/, '')

结果:A + B => C

r = /[a-z\s[:punct:]&&[^+ |^]]/

"The cat, 'Boots', had 9+5=4 ^lIVEs^ leF|t.".gsub(r,'')
  #=> "T  B  9+54 ^IVE^ F|"

正则表达式读取,"Match lowercase letters, whitespace and punctuation that are not the characters '+', ' ', '|' and '^'. && within a character class is the set intersection operator. Here it intersects the set of characters that match a-z\s[:punct:] with those that match [^+ |^]. (Note that this includes whitespaces other than spaces.) For more information search for "字符类也支持&&运算符"in Regexp

我没有包括 '=>''<=>',因为它们与 '+'' ''|''^' 不同,是多个- 字符串,因此需要一种不同于简单地删除某些字符的方法。