s = "1 2 "; StringCases[s, (n : NumberString ~~ " ") .. ] StringCases[s, (NumberString ~~ " ") .. ] yields
{"1 ", "2 "} {"1 2 "} Why?
Patterns get confusing quickly. If you name a pattern you're imposing more restrictions on that pattern that are sometimes difficult to follow. Using your example,
s = "1 2 "; StringCases[s, (n : NumberString ~~ " ") .. ] StringCases[s, (NumberString ~~ " ") .. ] In the first case you're telling string cases to match n, where n must be a number string and to continue the pattern for any match with the parenthetical statement repeated. In the repeated suffix n must always be the same number!
In the second case you're specifying that any repeated pattern of NumberString+Whitespace should match. Since you haven't named the number string, the pattern still applies generally to any number.
Trying
s = "1 1 1 2 2"; StringCases[s, (n : NumberString ~~ " ") .. ] StringCases[s, (NumberString ~~ " ") .. ] Will give:
{1 1 1 , 2 2 } {1 1 1 2 2 } Which shows that the first pattern works any time the integer following the white space is the same as the n that triggered the match.
{MatchQ[{1, 1, 2}, {x_Integer ..}], MatchQ[{1, 1, 2}, {_Integer ..}]}. $\endgroup$ {x_Integer..} it is completely clear and I use it all of the time. $\endgroup$
(n : NumberString), what happens? $\endgroup$nbe set to if the second case was the result? $\endgroup$nin the first situation you are specifying that only patterns of the form(n~~" ")..will match, where the repeating element must contain the same numbern. Since 2!=1 you don't match any further. In the second case you allow any number digit in the repeated part of the pattern. Try matching1 1. $\endgroup$