I have the following line code:
Cases[g[h, r, t, b, m], x_[__, y_, __] -> y, {0, -1}]
I am expecting the results to be {r,t,b}
because they match the pattern, but I am only getting {r}.
Can anyone suggest why I am getting only {r}?
If your aim is to remove the first and last argument:
Cases[g[h, r, t, b, m], _[_, y__, _] :> y, {0}]
Don't forget to localize y
with :>
g[h, r, t, b, m][[2 ;; -2]] /. g -> List
List @@ (g[h, r, t, b, m][[2 ;; -2]])
Delete[List @@ fun, {{1}, {-1}}]
y
has a global value it will be used rather than the sequence matching the pattern y__
.
$\endgroup$
Jul 13, 2014 at 22:45
Try using Longest
:
Cases[g[h, r, t, b, m], x_[__, Longest@y__, __] -> y, {0}]
Your single underscore after y only matches 1 element.
ReplaceList[g[h, r, t, b, m], _[__, y_, __] :> y]
(*{r, t, b}*)