s = "1 2 ";
StringCases[s, (n : NumberString ~~ " ") .. ]
StringCases[s, (NumberString ~~ " ") .. ]
yields
{"1 ", "2 "}
{"1 2 "}
Why?
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 ..}]}.
– Alexey Popkov
Jun 16 '15 at 16:36
{x_Integer..} it is completely clear and I use it all of the time.
– halirutan
Jun 16 '15 at 16:36
(n : NumberString), what happens? – J. M.'s missing motivation Jun 16 '15 at 14:11nbe set to if the second case was the result? – george2079 Jun 16 '15 at 15:27nin 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. – N.J.Evans Jun 16 '15 at 15:44