0

我正在尝试对以下内容进行模式匹配并将“c”替换为左右括号。

示例:字符串 = "(a,b)"

所以我希望字符串在我调用string.sub(//,"c")它之后像“ca,cb”一样出来。我试过string.sub(/[()]/,"c")了,但这只会导致“ca,b)”。如何模式匹配左右括号?

4

3 回答 3

3
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.

于 2012-09-06T01:57:37.940 回答
3

对于单个字符替换尝试 tr:

'(a,b)'.tr '()', 'c'
于 2012-09-06T02:58:26.650 回答
0

如果您的预期输出确实是"ca,cb"而不是"ca,bc",这是迄今为止给出的其他答案的结果,那么以下应该可以解决问题:

1.9.3-p194 :001 > "(a,b)".tr('(', 'c').gsub(/(.)\)/, 'c\1')
=> "ca,cb"

您尚未指定如何处理空括号或多个级别,因此不考虑这些情况。

于 2012-09-06T09:52:45.007 回答