questão Regex resolver duas condições

votos
-2

Aqui está o problema. Eu preciso escrever um regex que destaca todos os itens no texto a seguir:

AAAAB

mas não neste texto:

ABABA

Meu primeiro pensamento era usar A?B?mas que não funcionou. Qualquer ajuda / explicação seria muito apreciada

Publicado 27/11/2018 em 17:56
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Supondo que você deseja corresponder única AAAAB, independentemente de onde ele é relativo a outro texto, então você pode usar a expressão regular:

A{4}B

Aqui, Amatchs o caráter A, {4}corresponde 4 dos itens precedentes (portanto, neste caso, o AAAA string) e Bcorresponde a uma ocorrência do caractere B, desde que se trata após a seqüência de caracteres AAAA. Isso não vai coincidir com a seqüência ABABA.

Respondeu 27/11/2018 em 18:04
fonte usuário

votos
0

Eu suponho, você deseja corresponder não apenas quatro vezes ao e um B , mas sim:

  • A sequência não-vazia de A.
  • Em seguida, uma sequência não-vazia de B.
  • E nada mais. Nem antes nem depois não pode ocorrer qualquer outra letra / dígito.

Se a fórmula acima é certo, use:

^A+B+$

Observe o uso de ^e $âncoras.

Outra hipótese: Combinar a sequência acima como uma única palavra , ou seja, não pode ser outro texto "circundante", mas nenhuma letra ou dígito pode ficar em posição adjacente a esta corda (embora possa ser separado por um espaço).

Em tal caso de uso:

\bA+B+\b

Desta vez, em vez de ^e $âncoras usamos \b- palavra marcos de fronteira.

Respondeu 27/11/2018 em 20:10
fonte usuário

votos
0

Se o seu problema é só que você quer casos em que a é repetido antes de B, que é bastante fácil:

import re
match = re.compile('AA+?B')
match.match('AAAAB') #Finds a match
match.match('ABAB') #Finds no match

Se isto não é o que você está procurando, você precisa ser mais explícito sobre a sua saída esperada e talvez dar mais exemplos.

Respondeu 27/11/2018 em 18:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more