As the title, if I have a list:
{"", "", "", "2$70", ""}
I will expect:
{"", "", "", "2$70", "2$70"}
If I have
{"", "", "", "3$71", "", "2$72", ""}
then:
{"", "", "", "3$71", "3$71", "2$72", "2$72"}
And
{"", "", "", "3$71", "","", "2$72", ""}
should give
{"", "", "", "3$71", "3$71", "", "2$72", "2$72"}
This is my try:
{"", "", "", "2$70", ""} /. {p : Except["", String], ""} :> {p, p}
But I don't know why it doesn't work. Poor ability of pattern match. Can anybody give some advice?

Module[{last = "", f}, f[""] := last; f[x_] := last = x; f /@ # ] &@{"", "", "", "2$70", ""}$\endgroup${"", "x", "y", "", "z", ""}? $\endgroup${"", "x", "y", "y", "z", "z"}$\endgroup$