我正在尝试对以下内容进行模式匹配并将“c”替换为左右括号。
示例:字符串 = "(a,b)"
所以我希望字符串在我调用string.sub(//,"c")
它之后像“ca,cb”一样出来。我试过string.sub(/[()]/,"c")
了,但这只会导致“ca,b)”。如何模式匹配左右括号?
ruby-1.9.3-p125 :001 > string = "(a,b)"
=> "(a,b)"
ruby-1.9.3-p125 :002 > string.gsub(/[()]/, "c")
=> "ca,bc"
Note the gsub
: sub
makes a single substitution; gsub
("global sub") substitutes as many as it can.
对于单个字符替换尝试 tr:
'(a,b)'.tr '()', 'c'
如果您的预期输出确实是"ca,cb"
而不是"ca,bc"
,这是迄今为止给出的其他答案的结果,那么以下应该可以解决问题:
1.9.3-p194 :001 > "(a,b)".tr('(', 'c').gsub(/(.)\)/, 'c\1')
=> "ca,cb"
您尚未指定如何处理空括号或多个级别,因此不考虑这些情况。