Expressão Regular: Acento

8 respostas
rafaelsantini

Preciso escrever uma expressão regular que retorne apenas os caracteres alfabéticos. Usando a classe java.util.regex.Pattern, escrevi a seguinte: [color=green][\p{Alpha}]*[/color]. Porém, ela não me retorna os caracteres alfabéticos acentuados. Embora na documentação diga que essa classe suporta apenas US-ASCII, ainda não estou convencido. Não existe uma forma de suportar os caraceteres acentuados?

Com o Jakarta Regexp não tenho esse problema. Não queria usar uma outra biblioteca só para isso visto que o Java tem suporte a expressões regulares.

8 Respostas

dlt

velho, não tenho certeza, mas acho que vc pode resolver isso se fizer uma pesquisa sobre er’s + locales

T

Você tem de usar [\p{Lu}\p{Ll}] se não me engano. Deixe-me dar uma olhada.

T

É só \p{L}. Vou mostrar abaixo um exemplo.

import java.util.*;
import java.util.regex.*;
import java.text.*;

class ExpressaoRegularAcentuada {
    public static void main(String[] args) {
	    String texto = "Para respondermos às perguntas que nos teem sido feitas acêrca da"
+ " ortografia adoptada pelos editores técnicos da «+Enciclopédia de"
+ " ciéncia, arte e literatura--Biblioteca de Portugal e Brasil[1]+» temos a"
+ " honra de dirijir a V. Ex.ª esta circular, e rogamos-lhe que faça tão"
+ " conhecidos, quanto em seu poder esteja, os fundamentos em que essa"
+ " ortografia assenta."

+ " Os princípios que servem de base à reforma ortográfica iniciada por nós"
+ " ambos e usada ha dois anos pelo segundo signatário desta circular, em"
+ " escritos particulares e oficiais, e em artigos publicados em alguns"
+ " papéis periódicos, são resultado de estudo consciencioso e larga"
+ " discussão dos iniciadores. São princípios deduzidos ou antes expressão"
+ " dos factos glotolójicos examinados com rigor; são todos demonstráveis, e"
+ " de simplicidade tal que os poderá compreender a sã intelijéncia, aínda"
+ " que para ela sejam estranhos os estudos de glotolojia."

+ " Vamos expô-los à apreciação pública desde já, e assim começará a"
+ " preparar-se a crítica de todos os indivíduos, que, por se prezarem de"
+ " Portugueses, não queiram que estranjeiros censurem não haver, para a"
+ " nossa formosíssima lingua, ortografia científica e uniforme a que deva"
+ " chamar-se +Ortografia Portuguesa+.";
        Pattern pat = Pattern.compile ("[\p{L}]+");
		Collator coll = Collator.getInstance (new Locale ("pt", "BR"));
		coll.setStrength (Collator.PRIMARY);
		SortedSet<String> words = new TreeSet<String>(coll);
		Matcher mat = pat.matcher (texto);
		while (mat.find()) {
		    words.add (mat.group());
		}
/** Isto deve imprimir:
[a, acêrca, adoptada, aínda, alguns, ambos, anos, antes, apreciação, arte, artig
os, às, assenta, assim, base, Biblioteca, Brasil, censurem, chamar, ciéncia, cie
ntífica, circular, com, começará, compreender, conhecidos, consciencioso, crític
a, da, de, deduzidos, demonstráveis, desde, desta, deva, dirijir, discussão, doi
s, dos, e, editores, ela, em, Enciclopédia, escritos, essa, esta, esteja, estran
hos, estranjeiros, estudo, estudos, Ex, examinados, expô, expressão, faça, facto
s, feitas, formosíssima, fundamentos, glotolojia, glotolójicos, ha, haver, honra
, indivíduos, iniciada, iniciadores, intelijéncia, já, larga, lhe, lingua, liter
atura, los, não, nos, nossa, oficiais, ortografia, ortográfica, os, ou, papéis,
Para, particulares, pelo, pelos, perguntas, periódicos, poder, poderá, por, Port
ugal, Portuguesa, Portugueses, preparar, prezarem, princípios, pública, publicad
os, quanto, que, queiram, reforma, respondermos, resultado, rigor, rogamos, sã,
são, se, segundo, sejam, servem, seu, sido, signatário, simplicidade, tal, tão,
técnicos, teem, temos, todos, uniforme, usada, V, Vamos, ª]
 */		
		System.out.println (words);
	}
}
netShot

Você quer apenas Letras ? e com acentos ?

Use :

Pattern pesquisa = Pattern.compile("[\p{L}]");

Documentação do java :
Documentação sobre ER’s

rafaelsantini

Valeu pessoal! [color=green][\p{L}][/color] resolve o meu problema! :slight_smile:

Paulo_Silveira

excelente post thingol!!!

T

Estou um bocado confuso…

String toPaint=“João pedro maio de cástro áte ó óadr”;

Pattern p = Pattern.compile("???????");
String[] result = p.split(toPaint);

Desejo partir está string em palavras
EX:
result[0]-João
result[1]-pedro
etc…

O que devo colocar no “???” ?

rafaelsantini

Pelo que entendi, você deseja separar cada palavra de uma string utilizando como critério o caractere espaço. Para isso, você pode usar a própria classe String, como no exemplo a seguir:

String frase = "Rafael de Melo Lima Santini"; for (String palavra : frase.split(" ")) { System.out.println(palavra); }Esse código irá produzir a seguinte saída:

Rafael
de
Melo
Lima
Santini

Criado 1 de fevereiro de 2008
Ultima resposta 9 de set. de 2008
Respostas 8
Participantes 6