Aquí hay dos soluciones Perl: la primera va palabra por palabra, construye una matriz hecha por el primer leter de cada palabra, luego elimina el acrónimo formado por esos leters. Es bastante débil, y debería fallar si hay algo más que el acrónimo y las letras por línea. También utiliza el patrón (?? {}) para insertar el acrónimo en la expresión regular, lo que me hace sentir mal:
use strict;
use warnings;
use 5.010;
$_ = "Static application security testing (SAST)";
my @first;
s/
\b
(?<first>\p{L})\p{L}*
\b
(?{ push @first, $+{first} })
\K \s+ \(
(??{ join '', map { uc } @first; })
\)
//gx;
say;
Mientras tanto, esta solución primero busca algo así como un acrónimo, luego construye una expresión regular para que coincida con tantas palabras necesarias: $ _ = "Pruebas de seguridad de aplicaciones estáticas (SAST)";
my ($possible_acronym) = /\((\p{Lu}+)\)/;
my $regex = join '', map({ qr/\b(?i:$_)\p{L}*\b\s*?/ } split //, $possible_acronym), qr/\K\Q($possible_acronym)/;
s/$regex//;
say;
(He intentado hacer una solución con (? (DEFINIR)) patrones, tales como la respuesta de tchrist here, pero fracasó estrepitosamente. Oh, bueno.)
Para más información acerca de (? :), capturas nombradas (?), \ K, y un montón de cosas swell, perlre es la respuesta.
¿Qué idioma? Esta puede ser una pequeña expresión regular divertida en .Net, pero no estoy seguro de que Java pueda manejarlo. La respuesta general es que no es posible usar un regex, pero ** extremadamente fácil ** hacerlo manualmente al recorrer las palabras, realmente no necesitas un analizador. – Kobi
Incluso si regex puede hacer esto, no estoy seguro si pertenece * al dominio best-done-via-regex. Consulte [Para usar o no las expresiones regulares?] (Http://stackoverflow.com/questions/4098086/to-use-or-not-to-use-regular-expressions/4098123#4098123). Sin embargo, encontrar varias palabras seguidas de una secuencia de letras sin espacios en mayúsculas en parens es fácil y está mejor hecho por medio de regex. – delnan
¡Vaya, la primera vez que leí esto, mi cerebro registró mal * anagrama * por * acrónimo *! No sé si las expresiones regulares son inapropiadas para * acrónimos *, la solución propuesta parece bastante sencilla, pero usar uno para generar * anagramas * equivaldría a implementar un contrapunto polifónico en un instrumento intrínsecamente único como el violín. Tendría que estar enojado, o ser un verdadero maestro, incluso para intentarlo (* a saber.* BWV 1001-1006). – tchrist