No caso esses nomes sempre estão em letras maiúsculas e podem vir acentuados, faço esse nome+= pois do jeito que está captura somente o primeiro nome e preciso do sobrenome completo.
importjava.util.regex.*;classPegaNomes{publicstaticvoidmain(String[]args){String[]testes={"\"A saúde era um problema que estava resolvido e agora não está mais\", disse o ministro do Planejamento, PAULO BERNARDO, depois de se reunir com a ministra da Casa Civil, DILMA ROUSSEFF, o ministro da Fazenda, GUIDO MANTEGA, e o mais afetado de todos, JOSÉ GOMES TEMPORÃO. Durante o encontro, a piada recorrente era de que o ministro da Saúde tinha amanhecido, de repente, R$ 40 bilhões mais pobre. \"Saímos de uma situação em que tudo levava a crer que teríamos um acordo histórico para a saúde, em que todos ganhavam, para essa realidade desastrosa\", disse TEMPORÃO. \"Foi um processo absolutamente contaminado por disputas partidárias.\"","\"O Orçamento prevê R$ 500 milhões de obras para o Poder Judiciário. Tem que mexer aí também. Não pode cortar só nos parlamentares, tem que ser isonômico\", afirmou JOVAIR ARANTES. O líder do PSC, HUGO LEAL (RJ), disse que a tendência é de \"um corte linear em todo o Orçamento\". \"Não avalio que o corte possa afetar mais os deputados. Cada um vai ter que dar sua cota de sacrifício. É melhor do que tirar muito de um lado e nada do outro, preservando, claro, setores essenciais como saúde e educação. Se (o corte) for só em cima das emendas, vai ter problema. Ninguém vai aceitar um corte aleatório\", afirmou LEAL.","SEUL - Cientistas sul-coreanos clonaram gatos angorá com uma proteína fluorescente que permite a eles emitir um brilho quando expostos à luz ultravioleta. A equipe liderada por KONG IL-KEUN, especialista em clonagem animal da Universidade Nacional de GYEOUNGSANG, informou que os gatos serão utilizados para pesquisas genéticas. "};Patternpat=Pattern.compile("[\\p{Lu}]{2,}([ -][\\p{Lu}]{2,})+");// A regra aqui é: só considerar algo como nome se esses padrões estiverem // próximos, ou seja, no máximo com um espaço ou "-" de diferença.for(inti=0;i<testes.length;++i){System.out.println("Teste "+i+":");Matchermat=pat.matcher(testes[i]);while(mat.find()){System.out.println("["+testes[i].substring(mat.start(),mat.end())+"]");}}}}
T
thingol
Hum, meu pattern não atende às suas necessidades já que os nomes vêm só no começo.
Mas você pode usar um pattern um pouco diferente ("^[\p{Lu}]{2,}([ -][\p{Lu}]{2,})+") e usar “if” em vez de “while”, já que é para achar só o primeiro.
T
thingol
Pergunta - você pode ter algo como “JOSÉ CAETANO D’ÁVILA DE SANT’ANNA?” Se tiver algo assim, em vez de
^[\p{Lu}]{2,}([ -][\p{Lu}]{2,})+
teríamos de usar:
^[\p{Lu}’]{2,}([ -][\p{Lu}’]{2,})+
para incluir tais nomes.
Você tem mais de um espaço no nome? Nesse caso, usar:
^[\p{Lu}’]{2,}([ -]+[\p{Lu}’]{2,})+
T
thingol
Ou, como o pessoal sempre diz, a solução mais fácil é procurar onde está o primeiro dígito numérico. Tudo que vier antes dele é um nome e não precisa dessa expressão regular super-complicada.
Pedrosa
Essa sua última funcionou para que serve esse p{Lu}?, valeu cara!
T
thingol
“\p{Lu}” é uma forma de descrever qualquer caracter maiúsculo, acentuado ou não. Veja o javadoc de java.util.regex.Pattern.