es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor de español que traduce documentos de tecnología de la información. Traduce lo siguiente al español. Pon en minúscula la segunda coincidencia en una combinación de palabras utilizando Regex.Replace.

En la configuración del apellido de una persona (sé que este es un trabajo terrible), estoy buscando convertir a minúsculas la segunda coincidencia en una combinación de cualquiera de las siguientes palabras: Van, Den, Der, In, de, het. Y repetir este patrón si ocurre de nuevo después de un ‘-‘ (nombres de familia combinados).

Resultados deseados:
Van Den Broek => Van den Broek
Derksen-van ‘t schip => Derksen-Van ‘t Schip
In Het Lid-Van De Boer => In het Lid-Van de Boer

He intentado capitalizar las primeras letras y convertir a minúsculas después de “‘” utilizando el siguiente código. Sin embargo, aún me falta habilidad con Regex para crear los resultados anteriores.

var formattedLastName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lastName);
formattedLastName = Regex.Replace(formattedLastName, @”(‘w\b)”, (Match match) => match.ToString().ToLower());

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr los resultados deseados, puedes utilizar expresiones regulares para hacer coincidir las palabras y patrones específicos en el apellido y modificarlos según sea necesario.

    Primero, crea un patrón de regex para hacer coincidir las palabras que deben estar en minúsculas en el apellido, incluyendo variaciones de mayúsculas:

    var patron = @"\b(Van|van|DEN|den|Der|der|In|in|de|DE|het|HET)\b";
    

    Luego, utiliza Regex.Replace para reemplazar cada coincidencia con la forma en minúscula deseada:

    apellidoFormateado = Regex.Replace(apellidoFormateado, patron, coincidencia => coincidencia.Value.ToLower());
    

    Para manejar casos donde las palabras en minúsculas ocurren dos veces seguidas, como “Van den”, puedes agregar otro patrón de regex para hacer coincidir la segunda aparición después de un guión:

    var patron2 = @"(?<=-)(\s*(" + patron + @")\s*)";
    

    Este patrón busca cero o más espacios, seguidos del patrón de palabra en minúscula, seguidos de cero o más espacios, después de un guión.

    Luego, utiliza Regex.Replace nuevamente para reemplazar cada coincidencia con la forma en minúscula deseada:

    apellidoFormateado = Regex.Replace(apellidoFormateado, patron2, coincidencia => coincidencia.Value.ToLower());
    

    Poniéndolo todo junto, el código podría lucir algo así:

    var patron = @"\b(Van|van|DEN|den|Der|der|In|in|de|DE|het|HET)\b";
    var patron2 = @"(?<=-)(\s*(" + patron + @")\s*)";
    var apellidoFormateado = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(apellido); 
    apellidoFormateado = Regex.Replace(apellidoFormateado, patron, coincidencia => coincidencia.Value.ToLower());
    apellidoFormateado = Regex.Replace(apellidoFormateado, patron2, coincidencia => coincidencia.Value.ToLower());
    

    Esto debería darte los resultados deseados para formatear apellidos con palabras en minúsculas.

Comments are closed.