Ajuda montar um RegExMatch

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Ajuda montar um RegExMatch

Re: Ajuda montar um RegExMatch

Post by Azarfy » 29 May 2020, 12:13

Muito obrigado Gio agora entendi como Remover o procurado !!

Realmente era algo que tinha muita duvida e estava usando uns método muito nada haver e claro não teve resultado.

Re: Ajuda montar um RegExMatch

Post by Gio » 29 May 2020, 11:49

Você precisa entender os comandos de tratamento de dados em texto e como criar algoritmos unindo vários desses comandos em sequência.

Eu fiz um tutorial sobre isso algum tempo atrás e você pode encontrá-lo aqui.

Essa sua pergunta é bastante simples de responder, mas não deixe de procurar entender os comandos, do contrário vai ficar tendo essa mesma dúvida sempre que precisar tirar dados de textos.

Analise o texto que você quer trabalhar e vai perceber que:

1. Você quer remover os parêntesis.
2. O parêntesis de abertura ( é sempre o primeiro caractere do texto (ou seja, o caractere mais à esquerda).
3. O parêntesis de fechamento ) é sempre o último caractere do texto (ou seja, o caractere mais à direita).

As características 2 e 3 nós podemos ter certeza que sempre serão assim pois foi assim que configuramos o comando RegExMatch(). Logo, ele não pode pegar nada que não tenha essas características.

Você pode remover um número de caracteres desejado iniciando da esquerda do texto com o comando StringTrimLeft.
Da mesma forma, pode remover um número de caraceteres iniciando da direita do texto com o comando StringTrimRight.

Dessa forma pode montar um algoritmo bem simples tipo esse abaixo:

Code: Select all

VAR := "(43)"
msgbox, %VAR%
StringTrimLeft, VAR, VAR, 1
StringTrimRight, VAR, VAR, 1
msgbox, %VAR%

:arrow: Veja que no código acima, conseguimos remover os parêntesis facilmente do conteúdo da variável VAR facilmente.

Re: Ajuda montar um RegExMatch

Post by Azarfy » 29 May 2020, 11:16

Muito obrigado novamente por me ajudar, e outra coisa, eu consigo remover o parenteses da minha resposta ?

No caso deu super certo apontou o (43), mas eu precisaria apenas do digito, é uma duvida muito recorrente minha, mas existe alguma forma de se conseguir isso ? De deixar apenas o Digito 43 ?

Re: Ajuda montar um RegExMatch

Post by Gio » 29 May 2020, 10:25

Bom dia Azarfy.

Você pode encontrar um guia rápido para a sintaxe de escrita dos parâmetros NeedleRegEx nesta página (Se você estiver usando uma versão recente do Google Chrome, o tradutor pode ajudá-lo).

Com relação ao caso apontado, a NeedleRegEx que você postou (\s\d{1,3}) basicamente está procurando o seguinte padrão:

Um espaço (\s), seguido de 1 a 3 dígitos numéricos (\d{1,3}). Este padrão será sempre procurado da esquerda para direita do texto.

:arrow: O padrão que você procura não é este. Ele é mais como: um parêntesis de abertura (, seguido de dois a cinco números, seguido de um parêntesis de fechamento ).

Tipo assim:

Code: Select all

PRIMEIRA_OCORRENCIA := RegExMatch(TEXTO_DA_LINHA, "\(\d{1,5}\)", TEXTO_ENCONTRADO)

:arrow: É importante lembrar que o RegEx vai pegar sempre a primeira ocorrência da esquerda para a direita do texto. Se houver qualquer possibilidade do texto conter outro padrão que se encaixe na descrição, você terá que eliminar isso do texto antes (eu mostrei como fazer isso no outro tópico).

Se ainda tiver alguma dúvida, basta postar abaixo :thumbup:

Re: Ajuda montar um RegExMatch

Post by garry » 29 May 2020, 10:09

função do usuário 'SKAN'

Code: Select all

TEXTO_DA_LINHA := "[01:45:46] [ATENDIMENTO] O jogador [TJS]Will.Zn[UPC](43) esta na fila para ser atendido com a senha 383, use ."
A= (  ;- começar
B= )  ;- fim
c:=xStr(TEXTO_DA_LINHA,,A,B,,,,,0,0)   ;- with A and B
d:=xStr(TEXTO_DA_LINHA,,A,B)           ;- between A and B
msgbox,%c%`n--------------------`n%d%
return
;----------------------------------------------------------------
;- SKAN  xStr  for general text extraction and parsing XML  HTML 
;- https://www.autohotkey.com/boards/viewtopic.php?f=6&t=74050
xStr(ByRef H, C:=0, B:="", E:="",ByRef BO:=1, EO:="", BI:=1, EI:=1, BT:="", ET:="") {                           
Local L, LB, LE, P1, P2, Q, N:="", F:=0                 ; xStr v0.97 by SKAN on D1AL/D343 @ tiny.cc/xstr  
Return SubStr(H,!(ErrorLevel:=!((P1:=(L:=StrLen(H))?(LB:=StrLen(B))?(F:=InStr(H,B,C&1,BO,BI))?F+(BT=N?LB
:BT):0:(Q:=(BO=1&&BT>0?BT+1:BO>0?BO:L+BO))>1?Q:1:0)&&(P2:=P1?(LE:=StrLen(E))?(F:=InStr(H,E,C>>1,EO=N?(F
?F+LB:P1):EO,EI))?F+LE-(ET=N?LE:ET):0:EO=N?(ET>0?L-ET+1:L+1):P1+EO:0)>=P1))?P1:L+1,(BO:=Min(P2,L+1))-P1) 
} 
;=======================================

Ajuda montar um RegExMatch

Post by Azarfy » 29 May 2020, 00:27

Boa noite, bom algumas semanas atras estive aqui pedindo ajuda para uma RegEx e deu certo, porem fui tentar colocar ela para ler outra linha e ela não funcionou. Estou apanhando muito e resolvi vim aqui pedir um helper. a linha seria o seguinte

Code: Select all

[01:45:46] [ATENDIMENTO] O jogador [TJS]Will.Zn[UPC](43) esta na fila para ser atendido com a senha 383, use "/atender helper".
Esse é um exemplo da linha eu precisaria que o RegEx pegasse o valor que fica entre parentese no caso o 43, porem a forma que estou fazendo não esta dando o resultado ela esta conseguindo pegar um valor de numero, mas o numero esta sendo o 383 que não é o foco.

O código que estou usando é esse:

Code: Select all

TEXTO_DA_LINHA := "[01:45:46] [ATENDIMENTO] O jogador [TJS]Will.Zn[UPC](43) esta na fila para ser atendido com a senha 383, use ."

PRIMEIRA_OCORRENCIA := RegExMatch(TEXTO_DA_LINHA, "\s\d{1,3}", TEXTO_ENCONTRADO)

MSGBOX % TEXTO_ENCONTRADO
E como disse o resultado não ta sendo o esperado, esta me dando o valor de 383, e eu precisaria do 43. Alguém pode me auxiliar a terminar esse RegEx ?

Top