0

大文字の単語をキャプチャする正規表現があります。そのため、すべて大文字の単語が 1 つ以上ある場合、正規表現はそれを見つけます。しかし、すべて大文字の単語をキャプチャする別の正規表現もあります。何らかの理由で、最初の正規表現は、最後に末尾の空白を含むすべて大文字の 1 つの単語をキャプチャしています。これが私のコードです。

    //This looks for All Cap Words inside parens-completed
    String ucParensRegEx = "\\([A-Z]+\\)";
    regexParser(we, ucParensRegEx);
    //This looks for All Upper case words with two or more letters.- completed
    String twoPlusUCRegEx = "[A-Z][A-Z]+";
    regexParser(we, twoPlusUCRegEx);

    String letNumRegEx = "[A-Z][A-Z0-9][A-Z]+";
    regexParser(we, letNumRegEx);

    //Looks for Uppercase words that start with a number-Completed
    String numLetRegEx = "[0-9][A-Z][A-Z]+";
    regexParser(we, numLetRegEx);

    String upperwhitespaceRegEx = "(\\b[A-Z'][A-Z]+\\b\\s*)+";
    regexParser(we, upperwhitespaceRegEx);

private void regexParser(WordExtractor we, String regex) {
    if (we.getParagraphText() != null) {
        String[] dataArray = we.getParagraphText();

        for (int i = 0; i < dataArray.length; i++) {
            String data = dataArray[i].toString();
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(data);
            while (m.find()) {
                if (!sequences.contains(data.substring(m.start(), m.end())) && !data.equals("US ") && !data.contains("ARABIC") && !data.contains("ALATEC") && !data.contains("HYPERLINK")) {
                    sequences.add(data.substring(m.start(), m.end()));
                    System.out.println(data.substring(m.start(), m.end()));
                    Acronym acc = new Acronym(data.substring(m.start(), m.end()), data, "", false);
                    newAcList.add(acc);
                }
            }
        }
    }
}
4

1 に答える 1

3
"\\b[A-Z'][A-Z]+(\s+[A-Z'][A-Z]+)*\\b"

内部の単語境界は不要です (\s[A-Z]定義上、空白と大文字の間に単語境界があるため)。したがって、必要なことは大文字の単語に一致し、オプションでその後に続く他の大文字の単語の束に一致することです。

于 2012-09-18T22:30:15.883 に答える