如何抓住所有以大写字母开头的单词?

时间:2011-09-25 20:35:37

标签: java regex

我想创建一个Java正则表达式来获取以大写字母开头的所有单词,然后是大写或小写字母,但这些字母可能包含重音符号。

示例:

  

其中

     

Àdónde

     

RAPIDO

     

ASTE

你能帮帮我吗?

3 个答案:

答案 0 :(得分:8)

正则表达式:

\b\p{Lu}\p{L}*\b

Java字符串:

"(?U)\\b\\p{Lu}\\p{L}*\\b"

<强>解释

\b      # Match at a word boundary (start of word)
\p{Lu}  # Match an uppercase letter
\p{L}*  # Match any number of letters (any case)
\b      # Match at a word boundary (end of word)

警告:这只适用于最近的Java版本(JDK7);对于其他人,您可能需要用更长的子正则表达式代替\b。如您所见[{3}},您可能需要使用(kudos to @tchrist)

(?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]))

表示\b,因此Java字符串将如下所示:

"(?:(?<=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])(?![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])|(?<![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])(?=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\]))\\p{Lu}\\p{L}*(?:(?<=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])(?![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])|(?<![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\])(?=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}\\[\\p{InEnclosedAlphanumerics}&&\\p{So}]\\]))"

答案 1 :(得分:1)

检测特定段落中的大写字母的代码在这种情况下输入为控制台输入。

import java.io.*;
import java.util.regex.*;
import java.util.Scanner;

public class problem9 {

    public static void main(String[] args) {
    String line1;
    Scanner in = new Scanner(System.in);
    String pattern = "(?U)\\b\\p{Lu}\\p{L}*\\b";

    line1 = in.nextLine();
    String delimiter = "\\s";   
    String[] words1 = line1.split(delimiter);

    for(int i=0; i<words1.length;i++){
        if(words1[i].matches(pattern)){
        System.out.println(words1[i]);
        }    
    }

  }
 }

如果你给输入类似

输入:这是我的第一个程序

输出:

第一

程序

答案 2 :(得分:0)

你可以不用正则表达式。通过将其转换为小写来验证每个单词中的第一个字母,然后检查相等性:

        String firstLetter = String.valueOf(seq[i].charAt(0));
        String lowerCase = firstLetter.toLowerCase();
        if (!firstLetter.equals(lowerCase))
            System.out.println(seq[i]);
   

它适用于任何口音。