utilizar regulares rango parentesis expresiones espacio dni como blanco java regex string split

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")

http://www.regular-expressions.info/wordboundaries.html

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").