2016-03-22 6 views
0

例: - :すべての出現を置き換えるには?エリクサーのカウンターと弦で?

Regex.replace ~r/\?/, "? ? ?", fn(token) -> ...some code here... end 

可変カウンタを持っている方法はありませんので"? ? ?">"1 2 3"

それはRegex.replaceで行うことができないように思えます。

+0

これを行うには、変更可能なカウンタは必要ありません。私はすぐに正確なコードを試す時間がありませんが、Enum.mapの行に沿っているでしょう。 –

答えて

4

あなたは正しいですが、Regexの置き換え可能なカウンターを置き換えることはできませんので、疑問符を1つずつ再帰的に変更する必要があります。 @ JustMichaelの答えがいいね。疑問符の間に空白以外の何かがある場合は、次のようにしてください:

def number_question_marks(string), do: number_question_marks("", string, 1) 

#helper takes previous and current string 
#if nothing changes we end recursion 
def number_question_marks(string, string, _), do: string 

#if something changed we call recursively 
def number_question_marks(_previous, string, counter) do 
    new = Regex.replace(~r/\?/, string, inspect(counter), global: false) 
    number_question_marks(string, new, counter + 1) 
end 
3
"? ? ?" 
    |> String.split(" ") 
    |> Enum.map_reduce(1, fn(x, acc) -> {acc, acc + 1} end) 
    |> elem(0) 
    |> Enum.join(" ") 

これは動作しますが、これを行う方法はもっと短いと思います。

+0

これは空白で区切られたすべてを置き換えますが、OPが望んでいるのでしょうか?あなたのやり方は、私が最初にやって来た方法でした。 –

関連する問題