Java 我要找的字都是大写的,有空格

Java 我要找的字都是大写的,有空格,java,regex,Java,Regex,如果文档中有连续的大写单词“I AM ALL uppercase”,则返回四个独立的大写单词。我需要的是返回整个大写字母“I AM ALL uppercase”。我该怎么做 String ucParensRegEx = "\([A-Z]+\)"; if (we.getParagraphText() != null) { String[] dataArray = we.getParagraphText(); for (int i = 0; i < dataArray.len

如果文档中有连续的大写单词“I AM ALL uppercase”,则返回四个独立的大写单词。我需要的是返回整个大写字母“I AM ALL uppercase”。我该怎么做

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);
            }
        }
    }
}
String ucParensRegEx=“\([A-Z]+\)”;
if(we.getParagraphText()!=null){
String[]dataArray=we.getParagraphText();
for(int i=0;i
你在找这样的东西吗

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 
试试这个正则表达式:

((?:\b[A-Z']+\b\s*)+)
请注意,您可能需要在regex字符类中使用撇号,因为它可能出现在大写单词中,就像在
is not
中一样

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++;
    }
你可以在家玩这个


更新:

要将首字母缩写词与句点(如
U.S.
)匹配,并避免使用单字母首字母缩写词
p.
,您可以将正则表达式修改为:

((?:[A-Z]\.){2,}|(?:\b[A-Z][A-Z']*\b[?!]?\s*)+)
玩它 并且可以检查代码

尝试使用
“\\b([A-Z][A-Z]+[A-Z])\\b”
而不是您使用的表达式


这应该匹配A-Z的任何序列或空格,只要它们位于大写字母和两侧的单词边界之间-这应该有望涵盖大写单词的完整序列,除非您对允许数字在其中有一些要求。

多亏了投反对票的人,他们没有对为什么。。。非常有建设性。这将匹配小写单词之间的空格。请检查@Pshemo的另一个上排答案与小写单词之间的空格不匹配。它只匹配OP需要的大写单词之间的空格。虽然问题中没有明确说明,但这是一项隐含的要求。我明白你的意思了,我一定误读了你的话。如果我们只得到大写单词之间的空格,那么没有一个答案是完全正确的,因为它们都匹配尾随空格。我会更新我的答案,我想就是这样。我很感激你。太棒了。@MarkBasler-如果这是对你帮助最大的答案,你不应该接受这是最好的答案吗?那么另一个问题是,如果我需要找到每个字母之间都有句点的大写字母怎么办。例如,U.S.一个单词末尾的句点总是超出结束词的边界。因此,您应该尝试以下操作:
((?:\b[A-Z.]+\b\.?\s*)+)
,如图所示,它不起作用。也就是返回一封带句号的信。我需要至少两个或更多字符…带句点。这可能会变得很难看:
((?:[a-Z]\){2,}|(?:\b[a-Z][a-Z']*\b[?!]?\s*)+)
((?:[A-Z]\.){2,}|(?:\b[A-Z][A-Z']*\b[?!]?\s*)+)