1

連続する大文字がドキュメント「IAMALLUPPERCASE」にある場合、返されるのは4つの別々の大文字です。必要なのは、大文字の「IAMALLUPPERCASE」全体を返すことです。どうすればこれを行うことができますか?

String ucParensRegEx = "\([A-Z]+\)";
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("ARABIC") && !data.equals("ALATEC") && !data.equals("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);
                accronymList.add(acc);
            }
        }
    }
}
4

3 に答える 3

2

このようなものをお探しですか?

String data="Some SENTENCE WITHOUT MEANING AnD OTHER PART OF that SenTENCE.";
String regex = "(\\b[A-Z]+\\b\\s*)+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(data);
while (m.find()) 
    System.out.println(m.group());

出力:

SENTENCE WITHOUT MEANING 
OTHER PART OF 
于 2012-09-11T00:12:56.543 に答える
0

この正規表現を試してください:

((?:\b[A-Z']+\b\s*)+)

のように大文字の単語内で発生する可能性があるため、正規表現文字クラスのアポストロフィが必要になる場合があることに注意してくださいISN'T

Javaコード:

  String sourcestring = "Hello there I AM ALL UPPERCASE and NONE of me is LOWERCASE. True? ISN'T IT Not!";
  Pattern re = Pattern.compile("((?:\\b[A-Z']+\\b\\s*)+)");
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }

これは一致します:

I AM ALL UPPERCASE 
NONE 
LOWERCASE
ISN'T IT 

あなたはRegexPowertoyでこれで遊ぶことができます


アップデート:

頭字語を次のようなピリオドと一致させU.S.、1文字の頭字語を避けるためP.に、正規表現を次のように変更できます。

((?:[A-Z]\.){2,}|(?:\b[A-Z][A-Z']*\b[?!]?\s*)+)

ここで遊んで、コードをここ でチェックできます

于 2012-09-11T01:16:35.440 に答える
0

"\\b([A-Z][A-Z ]+[A-Z])\\b"あなたが持っている表現の代わりに試してみてください。

これは、大文字と両側の単語の境界の間にある限り、AZまたはスペースの任意のシーケンスと一致する必要があります-許可に関する要件がない限り、大文字の単語の完全なシーケンスをカバーする必要がありますそこに数字があります。

于 2012-09-11T01:39:32.787 に答える