in this expression = "{1 2 3 4 5 6 7 8}"
, I want to replace each space by a comma ,
to get {1,2,3,4,5,6,7,8}.
9 Answers
expression = "{1 2 3 4 5 6 7 8}";
A few alternatives to PlatoManiac's approach:
ToExpression[
expression,
StandardForm,
Function[e, Sequence @@@ Unevaluated[e], HoldAll]
]
or
ToExpression @ StringReplace[expression, " " -> ","]
{1, 2, 3, 4, 5, 6, 7, 8}
or
StringCases[expression, n : NumberString :> ToExpression[n]]
ToExpression @ StringCases[expression, NumberString]
A possibility with WhitespaceCharacter
ToExpression@
StringReplace[expression, WhitespaceCharacter -> ","]
(* {1, 2, 3, 4, 5, 6, 7, 8} *)
Another using Interpreter
Interpreter[
DelimitedSequence["Integer", {"{", " ", "}"}]][expression]
My thought was to drop the brackets using StringTake
and then import it using ImportString
"{1 2 3 4 5 6 7 8}"~StringTake~{2, -2}~ImportString~"Table" // First
(* {1, 2, 3, 4, 5, 6, 7, 8} *)
edit I just realized this is very similar to what J.M. suggested in his comment (although I'm playing around with infix notation here).
-
1$\begingroup$ It's not so similar to JMs version and in fact, I was going to post exactly this solution, because I think it is noteworthy that a space-separated list of numbers can be imported as "Table". +1 $\endgroup$ Commented Dec 16, 2015 at 8:39
-
$\begingroup$ Thanks, it was my first thought since I'm regularly running python (or c or fortran) code that outputs a big list or matrix and the quickest way for me to plot it is to just copy it and paste it into an
ImportString
command. $\endgroup$– Jason B.Commented Dec 16, 2015 at 8:47
Since space is implicit Times
similar methods to Convert head Times to List can be applied:
Block[{Times = List}, ToExpression @ "{1 2 3 4 5 6 7 8}"] // First
{1, 2, 3, 4, 5, 6, 7, 8}
Though in this case a much shorter method works too:
ToHeldExpression[expression] ~Level~ {3}
{1, 2, 3, 4, 5, 6, 7, 8}
Another solution, inspired by Kuba's first one:
Sequence @@@ ToExpression[expression, StandardForm, Inactivate]
Another way is to use StringRiffle
:
ToExpression[StringRiffle[StringSplit["{1 2 3 4 5 6 7 8}"], ","]]
{1, 2, 3, 4, 5, 6, 7, 8}
Note that StringRiffle
can also perform the inverse operation too:
StringRiffle[{1, 2, 3, 4, 5, 6, 7, 8}, {"{", ", ", "}"}]
"{1, 2, 3, 4, 5, 6, 7, 8}"
str = "{1 2 3 4 5 6 7 8}";
Using StringCases
with NumberString
ToExpression @ StringCases[str, NumberString]
{1, 2, 3, 4, 5, 6, 7, 8}
A similar case to "{1 2 3 4 5 6 7 8}"
, that also appears when you extract data from txt, is {"1 2 3 4 5 6 7 8"}
In that case, one can use
ToExpression@ StringSplit@ {"1 2 3 4 5 6"}
Using Composition
:
strToList = Composition[
ToExpression,
StringSplit,
StringReplace[#,
PunctuationCharacter :> ""] &
];
alist = strToList@expression
{1, 2, 3, 4, 5, 6, 7, 8}
Alternate notation:
ToExpression @*
StringSplit@*(StringReplace[#,
PunctuationCharacter :> ""] &)@expression
expression = "{1 2 3 4 5 6 7 8}"; ToExpression@StringSplit[ StringReplace[expression, "{" | "}" -> ""]]
$\endgroup$ImportString[StringReplace["{1 2 3 4 5 6 7 8}", "{" | "}" -> ""], "List", "LineSeparators" -> " "]
$\endgroup$