我必须清理参数中传递的字符串,并删除所有小写字母和除以下所有特殊字符:
所以我在参数中传递了这个字符串:
aA azee + B => C=
我需要清理此字符串以获得此结果:
A + B => C
我做
string.gsub(/[^[:upper:][+|^ ]]/, "")
输出:"A + B C"
我不知道如何在ruby中选择带有正则表达式的=>
(和<=>
)字符串)
我知道如果我将string.gsub(/ [^ [:upper:] [+ | ^ =>
]] /,“”添加到我的正则表达式中,我的最后一个=
在参数中传递的字符串也将被选中
答案 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)
r
(<?=>)|[^[:upper:]+|^ ]
将(<?=>)
或<=>
捕获到捕获组1 =>
匹配任何非大写字母的字符(与[^[:upper:]+|^ ]
相同)或[A-Z]
,+
,|
或空格^
结果: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中搜索“字符类也支持&&运算符”。
我没有包括'=>'
和'<=>'
,因为它们与'+'
,' '
,'|'
和'^'
不同,它们是多字符的字符串,因此与简单地删除某些字符相比,需要使用不同的方法。