rango - División de cadenas a través de expresiones regulares por puntuación y espacios en blanco, etc. en Java
parentesis en expresiones regulares java (4)
Bueno, al ver que quieres contar no puedes hacer dos palabras, prueba
split("//b//w+?//b")
Tengo este archivo de texto que leí en una aplicación Java y luego cuento las palabras en línea línea por línea. En este momento estoy dividiendo las líneas en palabras por un
String.split([//p{Punct}//s+])"
Pero sé que me estoy perdiendo algunas palabras del archivo de texto. Por ejemplo, la palabra "no se puede" debe dividirse en dos palabras "puede" y "t".
Las comas y otros signos de puntuación deben ignorarse por completo y considerarse como espacios en blanco. He estado tratando de entender cómo formar una expresión regular más precisa para hacer esto, pero soy un novato cuando se trata de esto, así que necesito ayuda.
¿Qué podría ser una mejor expresión regular para el propósito que he descrito?
Hay un literal sin palabras, /W
, ver Pattern
.
String line = "Hello! this is a line. It can''t be hard to split into /"words/", can it?";
String[] words = line.split("//W+");
for (String word : words) System.out.println(word);
da
Hello
this
is
a
line
It
can
t
be
hard
to
split
into
words
can
it
Tienes un pequeño error en tu expresión regular. Prueba esto:
String[] Res = Text.split("[//p{Punct}//s]+");
[//p{Punct}//s]+
mueve el formulario +
dentro de la clase de caracteres al exterior. En otro caso, se divide también en a +
y no combina los caracteres divididos en una fila.
Así que obtengo este código
String Text = "But I know. For example, the word /"can/'t/" should";
String[] Res = Text.split("[//p{Punct}//s]+");
System.out.println(Res.length);
for (String s:Res){
System.out.println(s);
}
este resultado
10
Pero
yo
saber
por
ejemplo
el
palabra
poder
t
debería
Cuál debería cumplir su requisito.
Como alternativa puedes usar
String[] Res = Text.split("//P{L}+");
//P{L}
significa que no es un punto de código Unicode que tiene la propiedad "Carta"
Tratar:
line.split("[//.,//s!;?:/"]+");
or "[//.,//s!;?:/"'']+"
Esta es una o una coincidencia de uno de estos caracteres: ., !;?:"''
(Tenga en cuenta que hay un espacio allí pero no / o /) el + hace que varios caracteres juntos se cuenten como uno.
Eso debería darle una precisión en su mayoría suficiente. Las expresiones regulares más precisas necesitarían más información sobre el tipo de texto que necesita analizar, porque ''también puede ser un delimitador de palabras. En su mayoría, los delimitadores de palabras de mayor puntuación están alrededor de un espacio en blanco, por lo que la coincidencia en [//s]+
sería una aproximación cercana. (pero da el recuento incorrecto de citas cortas como: Ella dijo: "no").