我想知道如何使用正则表达式在句子中提取单词

时间:2014-04-15 07:54:47

标签: java regex string

我在java中使用正则表达式。

我想提取我想要的单词。

示例)String exam = "..aa.aaa..bb.."

我想提取"..aa.aaa.."而不是"..aa.aaa..bb.."

所以我尝试像"(\\.\\.[a-z])([a-z]\\.\\.)"

这样的正则表达式

但是,程序返回句"..aa.aaa..bb.."

我该怎么办?

=============================================== =================== 这是完整的来源

public class test {
    public static void main(String ar[]) throws java.io.IOException {       

        String regex = "(\\.\\.[a-zA-Z0-9])[^\\.]*\\.[^\\.]+{2,}.*([a-z]{2,}\\.\\.)";

        String useStr = "..aa.aaa..bb..";
        Pattern pattern = Pattern.compile(regex);

        Matcher match = pattern.matcher(useStr);
        while (match.find()) {          
            String a = useStr.substring(match.start(), match.end());        
            System.out.println(a);          
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我在中间的[^\\.]*\\.[^\\.]+{2,}.*附近放置括号,并将其捕获到第2组,然后将第一组和第二组连接成字符串a。

我不确定这是否是您想要的确切模式,但它是正确的字符串。

public class test {
    public static void main(String ar[]) throws java.io.IOException {       

        String regex = "(\\.\\.[a-zA-Z0-9])([^\\.]*\\.[^\\.]+{2,}.*)([a-z]{2,}\\.\\.)";

        String useStr = "..aa.aaa..bb..";
        Pattern pattern = Pattern.compile(regex);

        Matcher match = pattern.matcher(useStr);
        while (match.find()) {          
            //String a = useStr.substring(match.start(), match.end());   
            String a = match.group(1) + match.group(2);  
            System.out.println(a);          
        }
    }
}

这会将a设置为..aa.aaa..并随后打印出来:{{1}}

答案 1 :(得分:0)

这是我在评论中提到的正则表达式的解决方案。 firstTwoDots匹配由..的前两次出现划分的子字符串,而dotsAndAs匹配由.a组成的所有内容:

public static void main(String ar[]) {       
    String firstTwoDots = "([.]{2})(.*?)([.]{2}).*";
    String dotsAndAs = "([.a]*).*";

    String useStr = "..aa.aaa..bb..";

    Matcher matcher = Pattern.compile(firstTwoDots).matcher(useStr);
    if (matcher.matches()) System.out.println(matcher.group(1) + matcher.group(2) + matcher.group(3));

    matcher = Pattern.compile(dotsAndAs).matcher(useStr);
    if (matcher.matches()) System.out.println(matcher.group(1));
}