Ir ao conteúdo

Outro Definir vários valores como um por regex em batch ou python é possível?


Ir à solução Resolvido por Kamuri,

Posts recomendados

Postado

É possível ou existe alguma forma de fazer uma variável possuir vários valores em um usando regex? (não me refiro a vetor)

exemplo:

string pessoa ="^pessoa$|^person$|^人間$|^ningen$|^human";

ao comparar qualquer uma das 6 palavras com a string pessoa iria vir um bool True, sem necessidade de "procurar" em vetor.

Desculpem se eu usar o termo errado, mas é parecido com uma tokenização na string.

Postado
11 horas atrás, Swalls disse:

uma variável possuir vários valores em um usando regex

Isso ficou bem difícil de entender. Poderia esclarescer melhor? Qual exatamente o resultado que você espera?

  • Curtir 1
Postado

@Kamuri é exatamente isso, se é possível um "match" reconhecer vários valores em uma única váriavel e se existir entre esses valores alguma correspondência retornar True se existir.

isso não é um vetor (@ricardo_br vetor e array são a mesma coisa)

 

tive essa ideia quando vi um script de um jogo na internet, fiquei pensando "How is that possible!?"

parte dele com isso:

				if(%#sel_rec%=1);
					#sel=0;
					if(%#store_la%=1);
								&trash="^298$|^299$|^300$|^301$|^268$|^269$|^270$|^271$|^290$|^272$|^273$|^274$|^275$|^291$|^306$|^307$|^308$|^309$|^267$|^256$|^257$|^258$|^292$|^314$|^315$|^316$|^317$|^283$|^284$|^285$|^286$|^294$|^293$|^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";
						&store="^0$|^122$|^129$|^153$|^155$|^264$|^265$|^266$|^287$|^322$|^349$|^351$|^369$|^370$|^384$|^387$|^394";
					endif;
					if(%#store_la%=2);
						&trash="^298$|^299$|^300$|^301$|^268$|^269$|^270$|^271$|^290$|^272$|^273$|^274$|^275$|^291$|^306$|^307$|^308$|^309$|^267$|^256$|^257$|^258$|^292$|^314$|^315$|^316$|^317$|^283$|^284$|^285$|^286$|^294$|^293$|^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267$|^351";
						&store="^0$|^122$|^129$|^153$|^155$|^264$|^265$|^266$|^287$|^322$|^349$|^369$|^370$|^384$|^387$|^394";
					endif;
					&records="^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";
				endif;
				if(%#sel_rec%=2);
					if(%#store_la%=1);
						&trash="^298$|^299$|^300$|^301$|^268$|^269$|^270$|^271$|^290$|^272$|^273$|^274$|^275$|^291$|^306$|^307$|^308$|^309$|^267$|^256$|^257$|^258$|^292$|^314$|^315$|^316$|^317$|^283$|^284$|^285$|^286$|^294$|^293";
						&store="^0$|^122$|^129$|^153$|^155$|^264$|^265$|^266$|^287$|^322$|^349$|^351$|^369$|^370$|^384$|^387$|^394$|^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";
					endif;
					if(%#store_la%=2);
						&trash="^298$|^299$|^300$|^301$|^268$|^269$|^270$|^271$|^290$|^272$|^273$|^274$|^275$|^291$|^306$|^307$|^308$|^309$|^267$|^256$|^257$|^258$|^292$|^314$|^315$|^316$|^317$|^283$|^284$|^285$|^286$|^294$|^293$|^351";
						&store="^0$|^122$|^129$|^153$|^155$|^264$|^265$|^266$|^287$|^322$|^349$|^369$|^370$|^384$|^387$|^394$|^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";
					endif;

 

Postado
3 horas atrás, Swalls disse:

é exatamente isso, se é possível um "match" reconhecer vários valores em uma única váriavel e se existir entre esses valores alguma correspondência retornar True se existir.

Agora entendi.

Você pode usar isso:

/(pessoa|person|人間|ningen|human)/gi

É um set que vai capturar grupos de caracteres com e no final as flags g (global) para pesquisar no texto inteiro e i para tornar a pesquisa case insensitive (tanto faz maiusculas e minusculas)

 

> x = /(pessoa|person|人間|ningen|human)/gi
/(pessoa|person|人間|ningen|human)/gi
> x.test("pessoa")
true
> x.test("aogioanpessoa")
true

Teste feito com nodejs

Postado

@Kamuri não consegui entender muito bem o seu segundo "parágrafo" mas tive uma ideia. Onde posso entender mais sobre isso? qual a biblioteca/linguagem? é nativo do node?

queria entender a lógica por trás desse pedaço de script de jogo pois parece diferente do que você apresentou, ele colocou vários itens separados por regex como uma única string?

  • Solução
Postado

@Swalls Ele fez um match pra valores na string. Por exemplo:

 

21 horas atrás, Swalls disse:
&records="^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";

Verifica se a string é exatamente um numero entre 2256 e 2267.

Isso pode ate ser diminuido para algo como:

^22[5-6][0-7]$

Que faz a mesma coisa.

Regex (regular expression, expressão regular) é uma sequencia de caracteres usada pra identificar um padrão num texto. não e especifico de uma unica linguagem, pode ser usada com Python pelo modulo re, por exemplo. Ja no NodeJS, regex faz parte da definiçao da lingaugem e pode ser usado nativamente sem nenhum modulo.

Quando eu tava iniciando com regex, usei o https://regexr.com/, tem varios exemplos bons la você ainda pode testar seus regex.

  • Obrigado 1
Postado
Em 10/03/2022 às 21:20, Swalls disse:

É possível ou existe alguma forma de fazer uma variável possuir vários valores em um usando regex? (não me refiro a vetor)

exemplo:

string pessoa ="^pessoa$|^person$|^人間$|^ningen$|^human";

ao comparar qualquer uma das 6 palavras com a string pessoa iria vir um bool True, sem necessidade de "procurar" em vetor.

Desculpem se eu usar o termo errado, mas é parecido com uma tokenização na string.

 

Em qualquer linguagem, regex tem que retornar duas coisas:
bool = se a regex casou ou não

string = qual parte da string completa foi casada

 

Em shell script, se você usar sed (ou awk), sed vai retornar 0 se houver sucesso e 1 se não houver sucesso, como todo processo em shell. E vai "imprimir" a string casada, que será uma string vazia caso a regex não encontre nada.

Regex é uma forma (fôrma, como forma de pão) na qual podem se encaixar várias possibilidades. Mas talvez nenhuma se encaixe. Você tem que pensar nisso também.

Dito isto, a maioria das linguagens de hoje em dia têm alguma forma de regex. O conceito se popularizou muito com Perl nos anos 90. É só questão de você consultar o manual da linguagem para saber qual é a sintaxe exata. O resto é raciocínio padrão: bool e string.

Então, em pseudocódigo, você tem que fazer algo assim:
 

if ( regex {!@#$%} $string == true ) { var pessoa = ${a string que a regex retornou} }
else {o que fazer se a regex não casar}


 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...