Как получить все слова, которые начинаются с заглавных букв? - PullRequest
4 голосов
/ 26 сентября 2011

Я хочу создать регулярное выражение Java для захвата всех слов, которые начинаются с заглавной буквы, а затем заглавной или маленькой буквы, но эти буквы могут содержать акценты.

Примеры:

Где

Адонда

Рапидо

Асте

Не могли бы вы мне помочь с этим?

Ответы [ 2 ]

8 голосов
/ 26 сентября 2011

Regex:

\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. Как вы можете видеть здесь , вам может понадобиться использовать (слава @ 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 голос
/ 17 ноября 2011

Код для обнаружения заглавных букв в данном пункте. в этом случае ввод задается как консольный ввод.

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]);
        }    
    }

  }
 }

Если вы введете что-то вроде

Ввод: это моя первая программа

выход:

Это

First

Программа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...