Find all words with 3 letters with regex

14,720

Solution 1

You should use your match with word boundaries instead of anchors:

\b[a-zA-Z]{3}\b

RegEx Demo

When you use:

^[a-zA-Z]{3}$

It means you want to match a line with exact 3 letters.

Solution 2

you can use . instead of [a-zA-Z] if you want to match any character (also numbers):

 \b.{3}\b

Solution 3

  1. To match all words with 3 letters in a string, the pattern needs to be "\b[a-zA-Z]{3}\b"

  2. The next step would be to compile your pattern.

    Pattern pattern = Pattern.compile("\\b[a-zA-Z]{3}\\b");
    
  3. Use a matcher and use the find() and group() methods to print the occurrences

    for (String word : sentence) {
        Matcher matcher = pattern.matcher(word);
        while(matcher.find()) {
            System.out.println(matcher.group());
        }
    }
    
  4. Your program should look something like -

    public static void main(String[] args) {
        List<String> sentence = new ArrayList<String>();
        sentence.add("cat");
        sentence.add("monkey");
        sentence.add("dog");
        sentence.add("mouse");
    
        Pattern pattern = Pattern.compile("\\b[a-zA-Z]{3}\\b");
    
        for (String word : sentence) {
            Matcher matcher = pattern.matcher(word);
            while(matcher.find()) {
                System.out.println(matcher.group());
            }
        }
    }
    
Share:
14,720
Evgenij Reznik
Author by

Evgenij Reznik

Updated on June 14, 2022

Comments

  • Evgenij Reznik
    Evgenij Reznik almost 2 years

    I'm trying to find all words with 3 letters in a string.
    So in this list

    cat monkey dog mouse
    

    I only want

    cat dog
    

    This is my expression:

    ^[a-zA-Z]{3}$
    

    I tested it with different online regex tester, but none of them matched my expression.