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

Java 我想知道如何使用正则表达式提取句子中的单词,java,regex,string,Java,Regex,String,我在java中使用正则表达式 我想提取我想要的单词 示例)String-exam=“…aa.aaa..bb..” 我想提取“.aa.aaa..”而不是“.aa.aaa..bb..” 所以我试着用这样的正则表达式“(\\.\\.\.[a-z])([a-z]\.\.\.\” 但是,程序返回语句“.aa.aaa..bb..” 我该怎么办 ================================================================== 这是完整的来源 public c

我在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,}.*<代码>中间,并将其捕获到组2中,然后将第一组和第二组连接到字符串A. < /P> 我不确定这是否是您想要的确切模式,但它是正确的字符串

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..

下面是我在评论中提到的两个正则表达式的解决方案。
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));
}

您的问题中没有准确解释/定义提取内容的规则。因此我们不得不猜测。您是在搜索由前两个
划分的子字符串,还是在只包含
a
的子字符串中?我还没有阅读一个正则表达式问题,它实际上以明确的术语定义了要搜索的内容。也许这就是所有这些问题的根源——提出问题的人并不理解这个事实。我建议你首先阅读。