Short answer, you should use \b\w\b.
Regular expression[\w]{1} matches any word character (letter, digit or underscore), but you want to get matches 'in a word boundary'. These are completely different things.
Our test string: Hello there have question
What is your mistake?
\w{1} finds any single word-character anywhere: H e
l l o t h e r e h a v e q u e s t i o n
\w{2} finds word-character pairs by order:
He ll th er ha ve qu es ti on Note that odd-length words
missed last letter (Hello --> He ll)
\w{3} finds word-character triplets anywhere:
Hel the hav que sti
etc...
And what we need?
\b...\b finds matches in a word boundary.
\w finds a word-characters
(digit, letter or underscore_).
\b\w\b finds one-length words. This is what we need.
HTH