1

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

  • +
  • |
  • ^
  • 空间
  • =>
  • <=>

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

aA azee + B => C=

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

A + B => C

我愿意

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

输出:"A + B C"

我不知道如何在 ruby​​ 中使用正则表达式选择=>(和 for <=>)字符串)

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

4

3 回答 3

5

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

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

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

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

例子:

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

输出:

"A  + B => C"

请注意,“A”和“+”之间有 2 个连续的空格。如果你不想这样,你可以打电话String#squeeze

于 2018-04-09T15:52:30.360 回答
1

请参阅此处使用的正则表达式

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

在此处查看正在使用的代码

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

结果:A + B => C

于 2018-04-09T15:58:53.853 回答
0
r = /[a-z\s[:punct:]&&[^+ |^]]/

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

正则表达式读取,“匹配字符类中不是字符 , 和 . 的小写字母、空格和标点符号是'+'集合' '交集运算'|'在这里,它与匹配的字符集相交。(请注意,此包括空格以外的空格。)有关更多信息,请在Regexp中搜索“字符类也支持 && 运算符” 。'^'&&a-z\s[:punct:][^+ |^]

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

于 2019-11-02T04:55:33.933 回答