2010-02-12 25 views
20

Necesito ayuda para armar una expresión regular que coincida con la palabra que termina con "Id" con coincidencia con mayúsculas y minúsculas.regex: coincida la palabra que termina con "Id"

+1

¿Qué pasa con estas palabras: 'Id' (comienza y termina con' Id') y 'O'HaraId' (¿quieres hacer coincidir' O'HaraId' o 'HaraId') y' foo-barId' (do quieres unir 'foo-barId' o' barId')? En resumen: defina lo que significa una "palabra" (o lo que quiere que sea). –

Respuesta

38

Pruebe esta expresión regular:

\w*Id\b 

\w* permite caracteres de palabra frente a Id y la \b asegura que Id se encuentra al final de la palabra (es \b declaración límite de palabra).

+0

@epitka, tenga en cuenta que '\ w' también coincide con los números y el guión bajo. En resumen, las cadenas '___ Id' y' 12345Id' también se igualarán. –

+0

Te di un voto positivo, pero epitka no especifica si solo está permitido "Id", por lo que estaría tentado de cambiar el * por una mejor respuesta de + – BenAlabaster

+0

: corto y fácil de entender. – huug

4

¿Qué tal \A[a-z]*Id\z? [Esto hace que los caracteres antes de Id sean opcionales. Utilice \A[a-z]+Id\z si es necesario que haya uno o más caracteres precedentes Id.]

1
Regex ids = new Regex(@"\w*Id\b", RegexOptions.None); 

"\ b" significa "descanso palabra" & \ w significa cualquier carácter de palabra, medios B de forma \ w * ID \ "{cosas }Carné de identidad". Al no incluir RegexOptions.IgnoreCase, será sensible a mayúsculas y minúsculas.

2

me gustaría utilizar
\b[A-Za-z]*Id\b
El \ b coincide con el comienzo y el final de una palabra es decir, el espacio, ficha o de nueva línea, o al principio o al final de una cadena.

El [A-Za-z] coincidirá con cualquier letra, y el * significa que coinciden 0+. Finalmente está el Id.

Tenga en cuenta que esto coincidirá con las palabras que tienen mayúsculas en el medio, como 'teStId'.

utilizo http://www.regular-expressions.info/ para referencia de expresiones regulares

+0

El conjunto 'a-z' excluye' é' y otros caracteres similares. Tal vez no sea un problema, pero algo epitka puede querer saber. –

+1

[A-Za-z] no coincide con los caracteres alfabéticos no ingleses, por lo que debe evitarse a favor de \ w a menos que se pueda garantizar que solo aparecerán las letras en inglés. – BenAlabaster

5

Esto puede hacer el truco:

\b\p{L}*Id\b 

Dónde \p{L} coincide con cualquier letra (Unicode) y \b coincide con un límite de palabra.

+0

does \ p {L} trabajo en C# regex?Nunca lo había visto antes y generalmente opto por \ w – BenAlabaster

+0

@BenAlabaster, sí: http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories Y sí, quizás '\ w' es suficiente para el OP, pero coincide con más de letras (ver mi comentario en la publicación de Gumbo). –

7

Gumbo mi voto, sin embargo, el PO no especifica si sólo "Id" es una palabra permitida, lo que significa que me gustaría hacer una pequeña modificación:

\w+Id\b 

1 o más caracteres de texto seguido por "Id" y un espacio de ruptura. Las variantes [a-zA-Z] no tienen en cuenta los caracteres alfabéticos no ingleses. También podría usar \ s en lugar de \ b como un espacio en lugar de un espacio de ruptura. Dependería si necesita envolver varias líneas.

Cuestiones relacionadas