Sou um novato em expressões regulares e não consigo descobrir como escrever uma única expressão regular que "corresponda" a quaisquer palavras consecutivas duplicadas, como:
Paris em a da primavera.
Não que isso esteja relacionado.
Por que você está rindo? São minhas minhas expressões regulares que ruim ??
Existe uma única expressão regular que corresponderá a TODAS as strings em negrito acima?
regex
duplicates
capture-group
Joshua
fonte
fonte
not that that is related
->not that is related
)? Agradecemos antecipadamente\1
!\b(\w+)\s+(\1\s*)+\b
?Respostas:
Experimente esta expressão regular:
Aqui
\b
está um limite de palavra e faz\1
referência à correspondência capturada do primeiro grupo.fonte
\0
também? (Onde\0
está toda a regex, até o ponto atual OU onde\0
se refere a toda a regex)Acredito que esta regex lida com mais situações:
Uma boa seleção de strings de teste pode ser encontrada aqui: http://callumacrae.github.com/regex-tuesday/challenge1.html
fonte
<strong>\0</strong>
mas não funcionou.$1 <strong>$2</strong>
. Mas também use regex diferente/\b(\S+) (\1)\b/gi
. Aqui está um link: callumacrae.github.io/regex-tuesday/…<p class="bebe">bla bla</p>
como posso integrar esta fórmula regex?Tente isso com RE abaixo
() * Repetindo novamente
fonte
A biblioteca PCRE amplamente usada pode lidar com tais situações (você não conseguirá o mesmo com motores regex compatíveis com POSIX, no entanto):
fonte
\W+
.\b
não vai fazer isso, porque não consome nenhum personagem.... the these problems...
. Esta solução não é tão confiável quanto a estrutura geral do padrão de Gumbo, que implementa suficientemente os limites das palavras.<p class="bebe">bla bla</p>
como posso integrar esta fórmula regex?Este é o regex que uso para remover frases duplicadas em meu bot do twitch:
(\S+\s*)
procura por qualquer sequência de caracteres que não seja um espaço em branco, seguido de um espaço em branco.\1{2,}
em seguida, procura mais de 2 ocorrências dessa frase na string para corresponder. Se houver 3 frases idênticas, ela corresponde.fonte
\s*
grupo de captura. Veja esta demonstração: regex101.com/r/JtCdd6/1I said "oioioi" that's some wicked mistressship!
emoioioi
esss
A expressão abaixo deve funcionar corretamente para encontrar qualquer número de palavras consecutivas. A correspondência pode não fazer distinção entre maiúsculas e minúsculas.
Amostra de entrada: Goodbye goodbye GooDbYe
Saída de amostra: adeus
Explicação:
A expressão regex:
\ b: Início de um limite de palavra
\ w +: qualquer número de caracteres de palavras
(\ s + \ 1 \ b) *: Qualquer número de espaço seguido pela palavra que corresponda à palavra anterior e termine o limite da palavra. Tudo envolvido em * ajuda a encontrar mais de uma repetição.
Agrupamento:
m.group (0): Deve conter o grupo combinado no caso acima Goodbye goodbye GooDbYe
m.group (1): Deve conter a primeira palavra do padrão correspondente no caso acima. Adeus
O método Replace deve substituir todas as palavras consecutivas correspondidas pela primeira instância da palavra.
fonte
Não. Essa é uma gramática irregular. Pode haver expressões regulares específicas do mecanismo / linguagem que você pode usar, mas não há nenhuma expressão regular universal que possa fazer isso.
fonte
Aqui está um que captura várias palavras várias vezes:
fonte
<p class="bebe">bla bla</p>
como posso integrar esta fórmula regex?<p class="bebe">.*?\b\s+(\w+)\b\K\s+\1\s+\b(?=.*?<\/p>)
Regex para remover 2+ palavras duplicadas (palavras consecutivas / não consecutivas)
Experimente esta regex que pode capturar 2 ou mais palavras duplicadas e deixar apenas uma única palavra. E as palavras duplicadas nem precisam ser consecutivas .
Aqui,
\b
é usado para Limite de palavras,?=
é usado para antecipação positiva e\1
é usado para referência inversa.Fonte de exemplo
fonte
"the cat sat on the mat"
->" cat sat on the mat"
O exemplo em Javascript: As boas partes podem ser adaptadas para fazer isso:
\ b usa \ w para limites de palavras, onde \ w é equivalente a [0-9A-Z_a-z]. Se você não se importa com essa limitação, a resposta aceita está bem.
fonte
Como alguns desenvolvedores estão vindo para esta página em busca de uma solução que não apenas elimine substrings duplicados consecutivos sem espaço em branco, mas triplicados e além, vou mostrar o padrão adaptado.
Padrão:
/(\b\S+)(?:\s+\1\b)+/
( Demonstração de padrão )Substituir:
$1
(substitui a correspondência de string inteira pelo grupo de captura # 1)Este padrão corresponde avidamente a uma substring "inteira" sem espaço em branco, então requer uma ou mais cópias da substring correspondida que pode ser delimitada por um ou mais caracteres de espaço em branco (espaço, tabulação, nova linha, etc).
Especificamente:
\b
(limite de palavra) caracteres são vitais para garantir que palavras parciais não sejam correspondidas.+
(um ou mais quantificadores) no grupo de não captura é mais apropriado do que*
porque*
"incomodará" o mecanismo de regex para capturar e substituir ocorrências de singleton - isso é um desperdício de design de padrão.* observe que se você estiver lidando com sentenças ou strings de entrada com pontuação, o padrão precisará ser mais refinado.
fonte
Esta expressão (inspirada em Mike, acima) parece capturar todas as duplicatas, triplicatas, etc, incluindo aquelas no final da string, o que a maioria das outras não:
Eu sei que a pergunta feita para coincidir com duplicatas apenas, mas um triplicado é apenas 2 duplicatas lado a lado :)
Primeiro, eu coloco
(^|\s+)
para ter certeza de que começa com uma palavra completa, caso contrário, "bife de criança" iria para "bife de criança" (o "s" iria corresponder). Em seguida, ele corresponde a todas as palavras completas ((\b\S+\b)
), seguidas por um final de string ($
) ou um número de espaços (\s+
), o todo repetido mais de uma vez.Eu tentei assim e funcionou bem:
fonte
\b
ao final assim:/(^|\s+)(\S+)(($|\s+)\2)+\b/g, "$1$2")
Isso funcionará para situações como esta:the the string String string stringing the the along the the string
se tornaráthe string stringing the along the string
Avisostring stringing
. Corresponde à sua resposta. Obrigado.Use isto caso você queira uma verificação sem distinção entre maiúsculas e minúsculas para palavras duplicadas.
fonte