2012-01-28 30 views
29

Me gustaría saber la expresión regular para que coincida con las palabras de forma que las palabras tengan una longitud máxima. por ejemplo, si una palabra tiene un máximo de 10 caracteres de longitud, me gustaría que la expresión regular coincida, pero si la longitud excede de 10, entonces la expresión regular no debe coincidir.Regex para que coincida con palabras de cierta longitud

me trataron

^(\w{10})$ 

pero eso me lleva sólo si coincide con la longitud mínima de la palabra es de 10 caracteres. Si la palabra tiene más de 10 caracteres, aún coincide, pero solo coincide con los primeros 10 caracteres.

+0

¿Hay alguna razón por la que no desee simplemente iterar sobre palabras y usar 'String.length()'? – MAK

+1

Sí. Esta cadena es parte de una cadena más grande que contiene palabras de varios formatos: fechas, correos electrónicos, URL, etc. todo en un formato delimitado por tabuladores. Estoy pensando en escribir una expresión regular compuesta para que coincida con toda la línea. –

+0

Ya veo. Dado que las palabras están delimitadas por pestañas, ¿no es posible dividirlas (usando 'String.split()' o 'StringTokenizer') y luego observar cada longitud de palabra? – MAK

Respuesta

39

Creo que quieres \w{1,10}\b. El \b coincide con un límite de palabras.

Por supuesto, también puede reemplazar el \b y do ^\w{1,10}$. Esto coincidirá con una palabra de como máximo 10 caracteres siempre que sea el único contenido de la cadena. Creo que esto es lo que estabas haciendo antes.

Dado que es Java, en realidad tendrá que escapar de las barras diagonales inversas: "\\w{1,10}\\b". Probablemente ya lo sabía, pero ya me entendí.

+0

Gracias. Estoy seguro de que el escape también me ha atrapado antes ...: 0 La expresión que proporcionaste coincide con los 10 caracteres si la palabra es mayor que 10. No quiero que coincida si la palabra excede los 10 caracteres. ¡Algo así como opuesto a \ w {10,} podrías decir ...! –

+1

@AnandHemmige: ¿Qué expresión? El que tiene '\ b' no debe coincidir con nada si hay más de 10 caracteres en la palabra. Lo mismo es cierto para el que termina en '$'. Deberías probar esto último si la cadena es solo una palabra. –

+1

En mi versión VI (gvim para Windows) necesito una barra invertida (\\) antes de '{' para que esto funcione. –

25
^\w{0,10}$ # allows words of up to 10 characters. 
^\w{5,}$ # allows words of more than 4 characters. 
^\w{5,10}$ # allows words of between 5 and 10 characters. 
+0

Espero que el primero de estos funcione como una especie de opuesto de \ w {10,} pero no es así. –

+3

'^' y '$' anclar la expresión regular al inicio y al final de la cadena. Si desea extraer subcompetencias (palabras de una determinada longitud), debe utilizar anclas de límite de palabras '\ b' en su lugar:' \ b \ w {1,10} \ b' encontrará palabras de longitud 1 en 10. –

14

Longitud de los caracteres que deben coincidir.

{n,m} n <= length <= m 
{n} length == n 
{n,} length >= n 

Y de forma predeterminada, el motor es codicioso para que coincida con este patrón. Por ejemplo, si la entrada es 123456789, \ d {2,5} coincidirá con 12345 que es con longitud 5.

Si desea que el motor regrese cuando la longitud de 2 coincide, use \ d {2,5}?

+1

Esto me fue útil ya que estaba buscando expresiones regulares para encontrar palabras mayores que x. – Zenil

Cuestiones relacionadas