tl; dr
Solo agrega un espacio en tu clase de personaje .
^[a-zA-Z0-9_ ]*$
Ahora, si quieres ser estricto ...
Lo anterior no es exactamente correcto. Debido al hecho de que *
significa cero o más , coincidiría con todos los siguientes casos que, por lo general, no significa que coincidan:
- Una cadena vacía, "".
- Una cadena compuesta completamente de espacios, "".
- Una cadena que conduce y / o sigue con espacios, "Hello World".
- Una cadena que contiene múltiples espacios entre palabras, "Hola mundo".
Originalmente, no creía que valiera la pena entrar en esos detalles, ya que OP hacía una pregunta tan básica que parecía que la rigidez no era una preocupación. Sin embargo, ahora que la pregunta ha ganado popularidad, quiero decir ...
Lo cual, en mi sabor (sin usar \w
) se traduce en:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Por favor, vota a @stema independientemente)
Algunas cosas a tener en cuenta sobre esta (y la respuesta de @ stema):
Si desea permitir múltiples espacios entre palabras (por ejemplo, si desea permitir espacios dobles accidentales, o si está trabajando con texto copiado y pegado de un PDF), agregue un +
espacio después del espacio:
^\w+( +\w+)*$
Si desea permitir pestañas y líneas nuevas (caracteres de espacio en blanco), reemplace el espacio con un \s+
:
^\w+(\s+\w+)*$
Aquí sugiero el +
valor predeterminado porque, por ejemplo, los saltos de línea de Windows consisten en dos caracteres de espacio en blanco en secuencia \r\n
, por lo que necesitará +
capturar ambos.
¿Sigue sin funcionar?
Comprueba qué dialecto de expresiones regulares estás usando. * En idiomas como Java, tendrá que escapar de sus barras diagonales inversas, es decir , \\w
y \\s
. En idiomas y utilidades más antiguos o más básicos, como sed
, \w
y \s
no están definidos, así que escríbalos con clases de caracteres, por ejemplo , [a-zA-Z0-9_]
y [\f\n\p\r\t]
, respectivamente.
* Sé que esta pregunta está etiquetadavb.net, pero en base a más de 25,000 visitas, supongo que no solo las personas se están enfrentando a esta pregunta. Actualmente es el primer hit en google para la frase de búsqueda, palabra de espacio de expresión regular .
Una posibilidad sería simplemente agregar el espacio en su clase de caracteres, como sugirió acheong87, esto depende de cuán estricto sea su patrón, porque esto también permitiría una cadena que comience con 5 espacios, o cadenas que consisten solo en espacios.
La otra posibilidad es definir un patrón:
Usaré
\w
esto en la mayoría de los sabores de expresiones regulares igual que[a-zA-Z0-9_]
(en algunos está basado en Unicode)Esto permitirá una serie de al menos una palabra y las palabras se dividen por espacios.
^
Coincide con el inicio de la cadena\w+
Une una serie de caracteres de al menos una palabra( \w+)*
es un grupo que se repite 0 o más veces. En el grupo espera un espacio seguido de una serie de caracteres de al menos una palabra$
coincide con el final de la cadenafuente
^- (\w+( \w+)*)$
me funcionó.Este me funcionó
fuente
Probar con:
Explicación:
fuente
ggggggggggggggggggggggggggggggggggggg;
, su expresión regular tomará mucho tiempo para alcanzar el resultado debido a un retroceso excesivo.Supongo que no quieres espacio inicial / final. Esto significa que debe dividir la expresión regular en "primer carácter", "cosas en el medio" y "último carácter":
o si usa una sintaxis similar a perl:
Además: si redactó intencionalmente su expresión regular para que también permita cadenas vacías, debe hacer que todo sea opcional:
Si solo desea permitir caracteres de espacio único, se ve un poco diferente:
Esto coincide con 0..n palabras seguidas de un solo espacio, más una palabra sin espacio. Y hace que todo sea opcional para permitir cadenas vacías.
fuente
\s
no son equivalentes.\s
coincide más que solo el espacio.Esta expresión regular
solo permitirá un espacio entre las palabras y no espacios iniciales o finales.
A continuación se muestra la explicación de la expresión regular:
^
Afirmar posición al inicio de la cadena\w+
Unir cualquier carácter de palabra[a-zA-Z0-9_]
+
entre una e ilimitadas veces, tantas veces como sea posible, devolviendo según sea necesario [codicioso](\s\w+)*
*
Entre cero e ilimitado veces, tantas veces como sea posible, devolviendo según sea necesario [codicioso]\s
Coincide con cualquier personaje de espacio en blanco[\r\n\t\f ]
\w+
Unir cualquier carácter de palabra[a-zA-Z0-9_]
+
entre una e ilimitadas veces, tantas veces como sea posible, devolviendo según sea necesario [codicioso]$
Afirmar posición al final de la cadenafuente
Esto no permite espacio al principio. Pero permite espacios entre palabras. También permite caracteres especiales entre palabras. Una buena expresión regular para los campos de nombre y apellido.
fuente
Solo para alfabetos:
Para valor alfanumérico y
_
:fuente
Pruebe esto: (versión de Python)
cambiar el límite superior en función de su conjunto de datos
fuente
Simplemente agregue un espacio al final de su patrón regex de la siguiente manera:
fuente
Eché un buen vistazo a muchas de estas supuestas respuestas ...
... y bupkis después de buscar Stack Overflow, así como otros sitios, para obtener una expresión regular que coincida con cualquier cadena sin espacios en blanco iniciales o finales y solo un espacio entre palabras de caracteres estrictamente alfabéticos.
Por lo tanto, se modifica fácilmente a alfanumérico:
(Esto no coincide con palabras simples, solo usa un interruptor / if-else con un simple
^[a-zA-Z0-9]+$
si necesitas capturar palabras sueltas además).disfruta: D
fuente
[(?<=\d\s]
coincide con un carácter:(
,?
,<
,=
, un dígito o un carácter de espacio en blanco, y que pueden no ser lo que quería decir. Si se suponía que era una retrospectiva, debería serlo(?<=\d\s)
, pero no tiene sentido allí; la expresión regular nunca coincidiría.Creo que este funciona bien para un "Nombre completo":
fuente
tratar .*? para permitir espacios en blanco funcionó para mí
fuente
.
coincide con todo. Es muy probable que esta no sea la solución aquí.