【问题标题】:Find all words with 3 letters with regex使用正则表达式查找所有包含 3 个字母的单词
【发布时间】:2015-10-08 13:28:28
【问题描述】:

我正在尝试查找字符串中包含 3 个字母的所有单词。
所以在这个列表中

cat monkey dog mouse

我只想要

cat dog

这是我的表情:

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

我用不同的在线正则表达式测试器对其进行了测试,但没有一个符合我的表达方式。

【问题讨论】:

    标签: java regex string parsing


    【解决方案1】:

    您应该使用单词边界而不是锚点来匹配:

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

    RegEx Demo

    使用时:

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

    这意味着你想匹配一行精确的 3 个字母。

    【讨论】:

    • 在某些语言/平台中,\b 并不是 100% 可靠的。所以我推荐的是使用像这样的前瞻/后视:(?<!\w)\w{3}(?!\w)
    • 但是支持世界边界的正则表达式平台比后视功能要多得多。
    • 不确定。当\b 仅适用于基本的拉丁符号时,所有流行的都支持前瞻/后瞻。所以它完全不适合西里尔文。
    • Java 完全支持字边界,无需担心环顾四周。 @leetwinski:你不能说 Javascript 不流行,但它不支持后视。
    • 没错。我的错。以为是js支持的。但在许多情况下,\b 仍然不适合。可能有些人必须使用捕获组。
    【解决方案2】:

    如果你想匹配任何字符(也包括数字),你可以使用. 而不是[a-zA-Z]

     \b.{3}\b
    

    【讨论】:

      【解决方案3】:
      1. 要匹配字符串中包含 3 个字母的所有单词,模式需要 成为 "\b[a-zA-Z]{3}\b"

      2. 下一步是编译你的模式。

        Pattern pattern = Pattern.compile("\\b[a-zA-Z]{3}\\b");
        
      3. 使用匹配器并使用 find() 和 group() 方法打印匹配项

        for (String word : sentence) {
            Matcher matcher = pattern.matcher(word);
            while(matcher.find()) {
                System.out.println(matcher.group());
            }
        }
        
      4. 您的程序应该类似于 -

        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());
                }
            }
        }
        

      【讨论】:

        【解决方案4】:

        这对我有用。

        grep -e "\b...\b" all-words.txt
        

        这也有效:

        grep -E "\b.{3}\b" all-words.txt
        

        【讨论】:

          【解决方案5】:

          另一个建议是使用这种模式:

          \b\S{3}\b
          

          为了避免匹配 3 个空格。 此模式也将匹配,例如,西里尔字母。

          【讨论】:

            猜你喜欢
            • 2015-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-07
            • 2021-08-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多