tl; dr
Basta adicionar um espaço na sua classe de personagem .
^[a-zA-Z0-9_ ]*$
Agora, se você quer ser rigoroso ...
O exposto acima não é exatamente correto. Devido ao fato de *
significar zero ou mais , ele corresponderia a todos os seguintes casos que normalmente não significariam corresponder:
- Uma sequência vazia, "".
- Uma sequência composta inteiramente de espaços "".
- Uma sequência que leva e / ou arrasta com espaços, "Hello World".
- Uma sequência que contém vários espaços entre as palavras, "Hello World".
Originalmente, eu não achava que esses detalhes valiam a pena, pois a OP fazia uma pergunta tão básica que parecia que o rigor não era uma preocupação. Agora que a pergunta ganhou popularidade, no entanto, quero dizer ...
Que, no meu sabor (sem usar \w
) se traduz em:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Por favor, vote @stema independentemente.)
Algumas coisas a serem observadas sobre essa resposta (e da @ stema):
Se você deseja permitir vários espaços entre as palavras (por exemplo, se você deseja permitir espaços duplos acidentais ou se estiver trabalhando com texto colado em um PDF), adicione um +
após o espaço:
^\w+( +\w+)*$
Se você deseja permitir guias e novas linhas (caracteres de espaço em branco), substitua o espaço por \s+
:
^\w+(\s+\w+)*$
Aqui, sugiro o +
padrão por que, por exemplo, as quebras de linha do Windows consistem em dois caracteres de espaço em branco em sequência \r\n
, portanto, você precisará +
capturar os dois.
Ainda não funciona?
Verifique qual dialeto de expressões regulares você está usando. * Em linguagens como Java, você terá que escapar de suas barras invertidas, ou seja , \\w
e \\s
. Em linguagens e utilitários mais velhos ou mais básicos, como sed
, \w
e \s
não estão definidos, assim escrevê-los com classes de personagens, por exemplo, [a-zA-Z0-9_]
e [\f\n\p\r\t]
, respectivamente.
* Eu sei que esta pergunta está marcadavb.net, mas com base em mais de 25.000 visualizações, acho que não são apenas as pessoas que se deparam com essa pergunta. Atualmente, é o primeiro hit no google para a frase de pesquisa, palavra do espaço de expressão regular .
Uma possibilidade seria apenas adicionar o espaço à sua classe de personagem, como sugerido por acheong87, isso depende de quão rigoroso você é em seu padrão, porque isso também permitiria uma string iniciando com 5 espaços ou strings consistindo apenas de espaços.
A outra possibilidade é definir um padrão:
Vou usar
\w
isso na maioria dos tipos de expressões regulares, o mesmo que[a-zA-Z0-9_]
(em alguns é baseado em Unicode)Isso permitirá uma série de pelo menos uma palavra e as palavras são divididas por espaços.
^
Corresponder ao início da string\w+
Corresponde a uma série de pelo menos um caractere de palavra( \w+)*
é um grupo repetido 0 ou mais vezes. No grupo, espera um espaço seguido por uma série de pelo menos um caractere de palavra$
corresponde ao final da stringfonte
Este funcionou para mim
fonte
Tente com:
Explicação:
fonte
ggggggggggggggggggggggggggggggggggggg;
, seu regex levará muito tempo para alcançar o resultado devido ao retorno excessivo.Presumo que você não queira espaço à esquerda / à direita. Isso significa que você deve dividir a regex em "primeiro caractere", "itens no meio" e "último caractere":
ou se você usar uma sintaxe semelhante a perl:
Além disso: se você intencionalmente redigiu seu regex de que ele também permite Strings vazias, é necessário tornar a coisa toda opcional:
Se você deseja permitir apenas caracteres de espaço único, parece um pouco diferente:
Corresponde a 0..n palavras seguidas por um único espaço, mais uma palavra sem espaço. E torna a coisa toda opcional para permitir seqüências vazias.
fonte
\s
não são equivalentes.\s
corresponde mais do que apenas espaço.Essa expressão regular
permitirá apenas um único espaço entre as palavras e nenhum espaço à esquerda ou à direita.
Abaixo está a explicação da expressão regular:
^
Afirmar posição no início da string\w+
Corresponder a qualquer caractere de palavra[a-zA-Z0-9_]
+
entre uma e várias vezes, quantas vezes for possível, devolvendo o que for necessário [ganancioso](\s\w+)*
*
entre zero e tempo ilimitado, quantas vezes for possível, devolvendo conforme necessário [ganancioso]\s
Corresponde a qualquer caractere de espaço em branco[\r\n\t\f ]
\w+
Corresponder a qualquer caractere de palavra[a-zA-Z0-9_]
+
entre uma e várias vezes, quantas vezes for possível, devolvendo o que for necessário [ganancioso]$
Afirmar posição no final da stringfonte
Isso não permite espaço no começo. Mas permite espaços entre as palavras. Também permite caracteres especiais entre as palavras. Uma boa regex para os campos Nome e Sobrenome.
fonte
Apenas para alfabetos:
Para valor alfanumérico e
_
:fonte
Experimente o seguinte: (versão Python)
altere o limite superior com base no seu conjunto de dados
fonte
Basta adicionar um espaço ao final do seu padrão regex da seguinte maneira:
fonte
Deu uma boa olhada em muitas dessas supostas respostas ...
... e bupkis depois de vasculhar o Stack Overflow, bem como outros sites, em busca de uma regex que corresponda a qualquer sequência sem espaço em branco inicial ou final e apenas um espaço entre as palavras de caractere estritamente alfa.
Assim, facilmente modificado para alfanumérico:
(Isso não corresponde a palavras únicas, mas apenas use um switch / if-else com um simples
^[a-zA-Z0-9]+$
se você precisar capturar palavras únicas.)apreciar: D
fonte
[(?<=\d\s]
corresponde a um caractere:(
,?
,<
,=
, um dígito, ou um espaço em branco, e que pode não ser o que você quis dizer. Se deveria ser um olhar para trás, deveria ser(?<=\d\s)
, mas não faz sentido lá; o regex nunca corresponderia.Acho que este funciona bem para um "FullName":
fonte
experimentar .*? para permitir espaços em branco funcionou para mim
fonte
.
combina com tudo. É muito provável que essa não seja a solução aqui.