Pergunta simples sobre regex. Eu tenho uma sequência no seguinte formato:
this is a [sample] string with [some] special words. [another one]
Qual é a expressão regular para extrair as palavras entre colchetes, ie.
sample
some
another one
Nota: No meu caso de uso, os colchetes não podem ser aninhados.
[^]]
é mais rápido que o não ganancioso (?
), e também funciona com tipos de expressões regulares que não oferecem suporte a não gananciosos. No entanto, não ganancioso parece melhor.[
]
da saída (resultado)?Capturará conteúdo sem colchetes
(?<=\[)
- olhar positivo para[
.*?
- correspondência não gananciosa para o conteúdo(?=\])
- lookahead positivo para]
EDIT: para colchetes aninhados, o regex abaixo deve funcionar:
fonte
.
...Isso deve funcionar bem:
fonte
\[([^\[\]]*)\]
para obter o conteúdo no suporte mais interno. Se você examinarlfjlksd [ded[ee]22]
,\[([^]]+)\]
você receberá[ded[ee]
enquanto a expressão proposta retornaria[ee]
. testede no linkOs colchetes podem ser aninhados?
Caso contrário:
\[([^]]+)\]
corresponde a um item, incluindo colchetes. A referência anterior\1
conterá o item a ser correspondido. Se o seu sabor regex suportar a aparência, useIsso corresponderá apenas ao item entre colchetes.
fonte
/g
sinalização em JavaScript).Se você não deseja incluir os colchetes na correspondência, veja o regex:
(?<=\[).*?(?=\])
Vamos dividir
A
.
corresponde a qualquer caractere exceto para terminadores de linha. O visual?=
é positivo . Um lookahead positivo encontra uma string quando uma determinada string vem depois dela. O olhar?<=
é positivo . Um lookbehind positivo encontra uma string quando uma determinada string a precede. Para citar isso ,A alternativa
Se o mecanismo regex não suportar lookaheads e lookbehinds, você poderá usar o regex
\[(.*?)\]
para capturar as entranhas dos colchetes de um grupo e manipular o grupo conforme necessário.Como esse regex funciona?
Os parênteses capturam os caracteres em um grupo. A
.*?
recebe todos os caracteres entre os colchetes (exceto para terminadores de linha, a menos que você tem as
bandeira habilitado) de uma forma que não é ganancioso.fonte
(?<=\[).*?(?=\])
funciona bem como explicado acima. Aqui está um exemplo de Python:fonte
[]
), não parênteses.Caso você tenha colchetes desequilibrados , é possível criar alguma expressão com recursão semelhante a,
que, é claro, estaria relacionado ao idioma ou ao mecanismo RegEx que você pode estar usando.
RegEx Demo 1
Fora isso,
RegEx Demo 2
ou,
RegEx Demo 3
são boas opções para explorar.
Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, também é possível assistir neste link , como ele corresponderia a algumas entradas de amostra.
Circuito RegEx
O jex.im visualiza expressões regulares:
Teste
Fonte
Expressão regular para combinar parênteses balanceados
fonte
se você quiser preencher apenas uma pequena letra do alfabeto entre colchetes az
se você quer letras pequenas e maiúsculas a-zA-Z
se você quiser letras minúsculas e letra numérica a-zA-Z0-9
se você quer tudo entre colchetes
se você quiser texto, número e símbolos
fonte
Acima deve funcionar, dada a seguinte explicação
caracteres entre colchetes [] define a classe de caractere, o que significa que o padrão deve corresponder a pelo menos um caractere mencionado entre colchetes
\ s especifica um espaço
+ significa pelo menos um dos caracteres mencionados anteriormente em +.
fonte
A-Z
deve adicionar ao padrão([[][a-zA-Z \s]+[]])
:; Eu acho que é uma boa maneira, enquanto\
em padrões regex que definem marcas de seqüência de caracteres ("e ') e misturando novatos pela manipulação de barra invertida em" ou "usos!std::regex pattern{R"(["][a-zA-Z \s]+["])"};
Esse código extrairá o conteúdo entre colchetes e parênteses
fonte
Em R, tente:
fonte
gsub(pat, "\\1", x, perl=TRUE)
, ondepat
é a expressão regular fornecida ..Eu precisava incluir novas linhas e incluir os colchetes
\[[\s\S]+\]
fonte
Para corresponder uma substring entre o primeiro
[
e o último]
, você pode usarVeja uma demonstração de regex e uma demonstração de regex # 2 .
Use as seguintes expressões para corresponder cadeias entre os colchetes mais próximos :
Incluindo os suportes:
\[[^][]*]
- PCRE, Pythonre
/regex
. NET, Golang, POSIX (grep, sed, bash)\[[^\][]*]
- ECMAScript (JavaScript, C ++std::regex
, VBARegExp
)\[[^\]\[]*]
- Regex Java\[[^\]\[]*\]
- Onigmo (Ruby, requer escape de colchetes em todos os lugares)Excluindo os colchetes:
(?<=\[)[^][]*(?=])
- PCRE, Pythonre
/regex
, .NET (C #, etc.), ICU (Rstringr
), Software JGSoft\[([^][]*)]
- Bash , Golang - capture o conteúdo entre colchetes com um par de parênteses sem escape, também veja abaixo\[([^\][]*)]
- JavaScript , C ++std::regex
, VBARegExp
(?<=\[)[^\]\[]*(?=])
- Regex Java(?<=\[)[^\]\[]*(?=\])
- Onigmo (Ruby, requer escape de colchetes em todos os lugares)NOTA :
*
corresponde a 0 ou mais caracteres, use+
para corresponder a 1 ou mais para evitar correspondências de seqüência de caracteres vazias na lista / matriz resultante.Sempre que o suporte de ambos os olhares está disponível, as soluções acima se baseiam neles para excluir o suporte de abertura / fechamento à esquerda / à direita. Caso contrário, confie na captura de grupos (foram fornecidos links para as soluções mais comuns em alguns idiomas).
Se você precisar corresponder parênteses aninhados , poderá ver as soluções na expressão Regular para corresponder ao segmento de parênteses balanceados e substituir os colchetes pelos quadrados para obter a funcionalidade necessária. Você deve usar grupos de captura para acessar o conteúdo com o colchete de abrir / fechar excluído:
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- demonstração .NET\[(?:[^\]\[]++|(\g<0>))*\]
- Onigmo (Ruby) demofonte