例: - :すべての出現を置き換えるには?エリクサーのカウンターと弦で?
Regex.replace ~r/\?/, "? ? ?", fn(token) -> ...some code here... end
可変カウンタを持っている方法はありませんので"? ? ?"
>"1 2 3"
それはRegex.replace
で行うことができないように思えます。
例: - :すべての出現を置き換えるには?エリクサーのカウンターと弦で?
Regex.replace ~r/\?/, "? ? ?", fn(token) -> ...some code here... end
可変カウンタを持っている方法はありませんので"? ? ?"
>"1 2 3"
それはRegex.replace
で行うことができないように思えます。
あなたは正しいですが、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
"? ? ?"
|> String.split(" ")
|> Enum.map_reduce(1, fn(x, acc) -> {acc, acc + 1} end)
|> elem(0)
|> Enum.join(" ")
これは動作しますが、これを行う方法はもっと短いと思います。
これは空白で区切られたすべてを置き換えますが、OPが望んでいるのでしょうか?あなたのやり方は、私が最初にやって来た方法でした。 –
これを行うには、変更可能なカウンタは必要ありません。私はすぐに正確なコードを試す時間がありませんが、Enum.mapの行に沿っているでしょう。 –