用多个字符替换字符串中的字符,所有可能的组合

时间:2018-04-14 21:08:30

标签: string language-agnostic cross-platform

我将通过实例和期望的结果来解释。

说我有以下字符串作为基础:abcdwx

我希望在包含这些变体时生成所有可能的组合:“a” - > “1,$,A,@”,“b” - > “B”,c - > “#,0,07,cd,CD,Cd,cD,dd,DD”,“w” - > “n,NN,l,L,!,1,),(,0,#,&,%,$,^,##,^^”

因此,例如,可能的组合包括1bcd ## x abDDd!x和aBcDdNNx

谷歌搜索引导我(不是我想要的)Ruby代码

string = "abcdwx"
p = ?a, ?b, ?c, ?d, ?w, ?x
q = [ ?1, ?$, ?A, ?@ ], [ ?B ], [ ?#, ?0 ], [ ?d ], [ ?l ], [ ?n, ?N ]

replacements = Hash.new { |h, e| Array e }.tap do |h|
p.zip( q ).each { |p, q| h[p] = p, *Array( q ) }
end
#=> {"a"=>["1", "$", "A", "@"], "b"=>["B"], "c"=>["#", "0"], "d"=>["d"], "w"=>["l"], "x"=>["n", "N"]}

puts string.split( '' ).map( &replacements.method( :[] ) ).reduce( &:product ).map { |e|
e.flatten.join
}

我可以用于单字符替换,但它给了我

warning: '?' just followed by NN is interpreted as a conditional operator, put a space after '?'

syntax error, unexpected '?', expecting ']'

当我尝试做的时候,说“a” - > “##”或“a” - > “A0”

我做的事情的方法不需要是Ruby(甚至是脚本),我只是觉得这个语法错误问题可能有一个简单的解决方案,我不明白因为我不喜欢不知道编码。

1 个答案:

答案 0 :(得分:0)

我需要做的就是改变?##到##',?NN到'?NN'等等。