Como pesquisar ocorrências de mais de um espaço entre palavras em uma linha
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Todos os itens acima são correspondências válidas para este regex. Qual regex devo usar?
Respostas:
ESPAÇO (2 ou mais)
Você também pode verificar se antes e depois desses espaços vêm as palavras. (não outros espaços em branco, como guias ou novas linhas)
o mesmo, mas você também pode escolher (capturar) apenas os espaços para tarefas como substituição
ou veja que antes e depois dos espaços há qualquer coisa, não apenas caracteres de palavras (exceto espaços em branco)
fonte
\w
significa 'caracteres de palavra', ou seja, alfanuméricos e sublinhados, mas não outros caracteres que não sejam espaços. Para verificar se há espaços não em branco, use\S
(S maiúsculo). Além disso, o primeiro corresponderá apenas a linhas que contenham dois ou mais espaços e nada mais.\S
, só prefiro não contar com maiúsculas e minúsculas para essa funcionalidade, é mais fácil de ler.\w[ ]{2,}\w
irá falhar na correspondênciaword.<2 spaces>more words
ou uma string que consiste inteiramente em espaços.[^\s]([ ]{2,})[^\s]\w
falhará em linhas que começam com espaços ou strings comobla<2 spaces>.
...Solução simples:
Isso corresponde a todas as ocorrências de um ou mais caracteres de espaço em branco. Se você precisar corresponder a toda a linha, mas apenas se ela contiver dois ou mais caracteres de espaço em branco consecutivos:
Se os espaços em branco não precisam ser consecutivos:
fonte
.*
geralmente é ganancioso, o que significa que chegará ao final da string testada, e tudo o que se segue, se houver caracteres obrigatórios, não corresponderá. Normalmente, neste caso, é uma boa prática adicionar?
, como este.*?
. Aconteceu comigo usando o PCRE do PHP/^.*b.*$/
na verdade corresponde"foobar"
, embora você esperasse que o primeiro greedy já.*
correspondesse à string inteira.Este regex seleciona todos os espaços, você pode usar isso e substituí-lo por um único espaço
exemplo em python
fonte
Pesquise
[ ]{2,}
. Isso encontrará dois ou mais espaços adjacentes em qualquer lugar dentro da linha. Ele também corresponderá aos espaços à esquerda e à direita, bem como às linhas que consistem inteiramente em espaços. Se você não quer isso, verifique a resposta de Alexander.Na verdade, você pode omitir os colchetes, eles são apenas para maior clareza (caso contrário, o caractere de espaço que está sendo repetido não é tão bem visível :)).
O problema com
\s{2,}
é que ele também corresponderá às novas linhas nos arquivos do Windows (onde as novas linhas são indicadas porCRLF
ou\r\n
que correspondem a\s{2}
.Se você também deseja encontrar várias tabulações e espaços, use
[ \t]{2,}
.fonte
more than one space between words in a line
. Como estão as[ ]{2,}
palavras? Você ao menos leu a pergunta?Aqui está minha solução
Isso removerá todos os dígitos, vírgulas e novas linhas, mas selecionará o espaço do meio, como conjunto de dados de
fonte