/ / C # Expresión regular: busque las primeras 3 letras de cada nombre - c #, .net, regex

Expresión regular de C #: busca las 3 primeras letras de cada nombre - c #, .net, regex

¿Alguien sabe cómo decir que puedo obtener una búsqueda de expresiones regulares (C #) de las primeras 3 letras de un nombre completo?

Sin el uso de (.*)

Solía ​​(.**) pero desplaza el texto mucho más allá de lo solicitadonombre, o si encuentra la primera condición y después de 100 palabras encuentra la segunda condición, él devuelve un texto que no es el aspecto, así que tengo que limitar el número de palabras. Ejemplo: s*(?:s+S+){0,2}s*

Me gustaría ignorar los nombres con menos de 3 caracteres si existen en el nombre.

Busque cualquier nombre que contenga los primeros 3 caracteres que comiencen con:

"Mar Jac Rey" (regex that performs search)

Debe coincidir

  • marck Jacobs L. S. ReyNolds
  • marcus Jacobina Reys
  • maroon Jacqueline por Reyes

¿Alguien puede ayudarme?

Respuestas

0 para la respuesta № 1

El cero o más cuantificador (*) es "codicioso" por defecto, es decir, consumirá tantos caracteres como sea posible para encontrar el resto del patrón. Esta es la razón por Mar.*Jac coincidirá con el primero Mar en la entrada y la último Jac y todo en el medio.

Una posible solución es simplemente hacer que su patrón sea "no codicioso" (*?). Esto hará que consuma la menor cantidad de caracteres posible para que coincida con el resto del patrón.

Mar.*?Jac.*?Rey

Sin embargo, esta no es una gran solución porque aún coincidiría con las distintas partes del nombre, independientemente de qué otro texto aparezca en el medio, por ejemplo. Marcus Jacobine Should Not Match Reys Sería un partido válido.

Para permitir que solo aparezcan espacios en blanco o, como máximo, 2 caracteres consecutivos que no sean espacios en blanco entre cada parte del nombre, tendrá que ser más elegante:

bMarw*(s+S{0,2})*s+Jacw*(s+S{0,2})*s+Reyw*

El patrón (s+S{0,2})*s+ coincidirá con cualquier número de caracteres que no sean espacios en blanco que contengan como máximo dos caracteres, cada uno rodeado por espacios en blanco. los w* después de cada parte del nombre se asegura de que se incluya el nombre completo en esa parte de la coincidencia (es posible que desee utilizar S* en su lugar aquí, pero eso no está del todo claro en su pregunta). Y agregué un límite de palabra (b) al principio para asegurarse de que la coincidencia no se inicie en medio de una "palabra" (por ejemplo, OMar no coincidiría).


0 para la respuesta № 2

Creo que lo que quieres es esta expresión regular para verificar si es verdadera y no distingue entre mayúsculas y minúsculas

@"^[Mar|Jac|Rey]{3}"

Menos específico:

@"^[w]{3}"

0 para la respuesta № 3

Si desea capturar las primeras tres letras de cada palabra de al menos tres caracteres, puede usar algo como:

((?<name>[w]{3})w+)+

Y habilite Captura explícita al inicializar su Regex.

Te devolverá una serie de Match llamada "nombre", cada uno de ellos es un resultado.

Ejemplo de código:

Regex regex = new Regex(@"((?<name>[w]{3})w+)+", RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase);
var match = regex.Matches("Marck Jacobs L. S. Reynolds");

Si desea capturar también palabras de 3 caracteres, puede reemplazar la última "w" por un espacio. En este caso piensa en manejar la última palabra de la frase.