Bueno, estoy buscando una expresión regular en Java que elimine todas las palabras de menos de 3 caracteres. Pensé que algo como \s\w{1,2}\s
tomaría todas las palabras de 1 y 2 letras (un espacio en blanco, caracteres de una a dos palabras y otro espacio en blanco), pero simplemente no funciona. ¿Dónde estoy equivocado?Expresión regular eliminando todas las palabras más cortas que n
Respuesta
Lo tengo funcionando bastante bien, pero me llevó dos pasadas.
public static void main(String[] args) {
String passage = "Well, I'm looking for a regexp in Java that deletes all words shorter than 3 characters.";
System.out.println(passage);
passage = passage.replaceAll("\\b[\\w']{1,2}\\b", "");
passage = passage.replaceAll("\\s{2,}", " ");
System.out.println(passage);
}
La primera pasada reemplaza todas las palabras que contienen menos de tres caracteres con un solo espacio. Tenga en cuenta que tuve que incluir el apóstrofo en la clase de personaje para eliminar porque la palabra "Yo soy" me estaba dando problemas sin eso. Puede encontrar otros caracteres especiales en su texto que también debe incluir aquí.
El segundo pase es necesario porque la primera pasada dejó unos pocos lugares donde había espacios dobles. Esto simplemente colapsa todas las ocurrencias de 2 o más espacios hasta uno. Depende de usted si necesita mantener esto o no, pero creo que es mejor con los espacios colapsados.
Salida:
Bien, estoy buscando una expresión regular en Java que elimina todas las palabras de menos de 3 caracteres.
Bueno, en busca de regexp Java que elimine todas las palabras más cortas que los caracteres.
Sí, esto funciona bastante bien. – janesconference
FYI - haría "No lo puedo creer" => "Puede creerlo" – krinker
Probar: \b\w{1,2}\b
aunque todavía tendrá que deshacerse de los espacios del doble que aparecerán.
Si no desea que el espacio en blanco emparejado, es posible que desee utilizar
\b\w{1,2}\b
para obtener los límites de palabras.
que está trabajando para mí en RegexBuddy usando el sabor de Java; para la cadena de prueba
"El perro es un gato divertido"
destaca que "es" y "a". Del mismo modo para las palabras al comienzo/final de una línea.
Es posible que desee publicar un código de muestra.
(Y, como GameFreak acaba de publicar, usted todavía termina con espacios dobles.)
EDIT:
\b\w{1,2}\b\s?
es otra opción. Esto arreglará parcialmente el problema de eliminación de espacio, aunque las palabras al final de una cadena o seguidas de signos de puntuación todavía pueden causar problemas. Por ejemplo, "Un perro es divertido, ¿no?" se convierte en "perro divertido?" En cualquier caso, todavía tendrá problemas con el uso de mayúsculas (el perro ahora debería ser Dog).
Por favor deje un comentario cuando downvoting. Estaba componiendo esto al mismo tiempo que GameFreak publicó su respuesta; No lo copié simplemente. – TrueWill
te modifiqué. – janesconference
¡Gracias @janesconference! :) – TrueWill
Si usted tiene una cadena como esta:
hello there my this is a short word
Esta expresión regular coincidirá con todas las palabras en la cadena mayor o igual a 3 caracteres de longitud:
\w{3,}
El resultado es:
hello there this short word
Eso, para mí, es el método más sencillo. ¿Por qué tratar de hacer coincidir lo que no quiere, cuando puede hacer coincidir lo que quiere mucho más fácil? Sin espacios dobles, sin restos, y la puntuación está bajo su control. Los otros enfoques se rompen en espacios múltiples y no son muy robustos.
Parece una buena idea, pero actualmente estoy usando GWT y solo tengo los métodos regex de la clase String. Así que puedo dividir mi cadena o reemplazar mis expresiones regulares, pero no sé cómo obtener solo las cosas que combiné :( – janesconference
- 1. Expresión regular: coincide con todas las palabras excepto
- 2. Expresión regular que rechaza todas las entradas?
- 3. expresión regular que contiene palabras Unicode
- 4. Linux: eliminando archivos que no contienen todas las palabras especificadas
- 5. Lista de todas las palabras que coinciden con la expresión regular
- 6. Emacs, eliminando todas las líneas que no coinciden?
- 7. Producir todas las coincidencias posibles de una expresión regular
- 8. Actualizando dinámicamente las rutas más cortas
- 9. expresión regular para que coincida con todo, excepto las palabras dadas (que puede incluir guiones/guiones)
- 10. ¿Está utilizando una expresión regular más rápido que IndexOf?
- 11. Generando la expresión regular más corta para que coincida con una lista de palabras arbitraria
- 12. expresión regular más larga posible a juego
- 13. ¿Cómo contar palabras en MySQL/expresión regular replacer?
- 14. Todas las subcadenas superpuestas que coincidan con una expresión regular java
- 15. Las expresiones regulares: extraer todas las palabras de cotizaciones
- 16. Filtro profanidad usando una expresión regular (lista de 100 palabras)
- 17. ¿Es posible simplificar esta expresión regular más?
- 18. ¿Cuál es la expresión regular más eficiente?
- 19. Todas las Palabras, excepto uno
- 20. expresión regular para detectar números escritos como palabras
- 21. Cuál es la expresión regular más larga que ha visto
- 22. Búsqueda de palabras cortas con SOLR
- 23. Cómo hacer coincidir varias palabras en la expresión regular
- 24. Regex - Encuentra todas las palabras que coinciden que no comienzan con un prefijo específico
- 25. RegExp expresión regular Buscar y reemplazar sólo palabras completas
- 26. Expresión regular para buscar y eliminar palabras duplicadas
- 27. expresión regular para encontrar palabras que comienzan con un carácter específico
- 28. En VIM, ¿cómo puedo eliminar todas las líneas hasta que se encuentre una expresión regular?
- 29. Expresión regular para contar palabras con precisión usando JavaScript
- 30. expresión regular lookahead negativo
Todas las palabras en una cadena de menos de 3, o una palabra a la vez? –
todas las palabras en un solo pasaje, simplemente no las necesito. – janesconference