使用ruby在正则表达式中选择一个字符串

时间:2018-04-09 15:39:44

标签: ruby regex rubular

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

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

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

aA azee + B => C=

我需要清理此字符串以获得此结果:

A + B => C

我做

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

输出:"A + B C"

我不知道如何在ruby中选择带有正则表达式的=>(和<=>)字符串)

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

3 个答案:

答案 0 :(得分:5)

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

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

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

正如您所看到的,这只是一个使用|[]来创建您要保留的字符串列表:大写,数字,+,|,空格,^,=&gt;和&lt; =&gt;。

示例:

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

输出:

"A  + B => C"

请注意,&#34; A&#34;之间有2个连续的空格。和&#34; +&#34;。如果您不想要,可以拨打String#squeeze

答案 1 :(得分:1)

See regex in use here

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

See code in use here

^

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

答案 2 :(得分:0)

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

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

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

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