Regex - pitanja i odgovori

poruka: 17
|
čitano: 6.146
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
odjavljen
offline
Regex - pitanja i odgovori

Dakle, pošto nigdje nema teme o regexu, otvaram ja i to sa pitanjem.

 

Imamo string AAABBB__CCCCDDDDDDDD i string AAABBB__CCCCCCDDDDDDDD. Kako ih "pogoditi"?

 

Dakle, ovaj prvi dio nije bitan kao ni pogađanje jednog od slučajeva (4x C i 6x D) ali mene zanima kako da dobijem npr 6x C (ako dođe takav string) i onda normalno D koliko ih već ima?

 

Konkretno, 1234385991234567 nađem sa (\w{4})([0-9]{6,}$) ali, ako umjesto 385991234567 imam 555111 a umjesto 1234 imam 654321, nastaje problem. Dakle, 654321555111.

 

Nema nikakvog separatora. Prva grupa može biti 0-9 do 8 znakova a iduća grupa je zapravo broj telefona koji dođe ili kao internacionalni (38501....), kao 098.... ili u krajnjem slučaju 555111.

 

Jel ima neki način ili previše tražim od regexa?

My name is Legion... For we are many!
Moj PC  
2 0 hvala 0
11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori
Sum_of_all_fears kaže...

Dakle, pošto nigdje nema teme o regexu, otvaram ja i to sa pitanjem.

 

Imamo string AAABBB__CCCCDDDDDDDD i string AAABBB__CCCCCCDDDDDDDD. Kako ih "pogoditi"?

 

Dakle, ovaj prvi dio nije bitan kao ni pogađanje jednog od slučajeva (4x C i 6x D) ali mene zanima kako da dobijem npr 6x C (ako dođe takav string) i onda normalno D koliko ih već ima?

 

Konkretno, 1234385991234567 nađem sa (\w{4})([0-9]{6,}$) ali, ako umjesto 385991234567 imam 555111 a umjesto 1234 imam 654321, nastaje problem. Dakle, 654321555111.

 

Nema nikakvog separatora. Prva grupa može biti 0-9 do 8 znakova a iduća grupa je zapravo broj telefona koji dođe ili kao internacionalni (38501....), kao 098.... ili u krajnjem slučaju 555111.

 

Jel ima neki način ili previše tražim od regexa?

Koliko vidim, ta 2 stringa nemaju nista zajednicko, a da bi ih mogao prepoznati samo regexom. Ako je to samo niz znamenki bez separatora, a ovaj prvi dio je varijabilan, morat ces nekako prepoznati telefonski broj unutar tog stringa. Npr. ako uhvatis 385 unutar tog stringa, sve poslije je tel.broj, a prije 385 je ta prva grupa. Buduci da je duljina prve grupe varijabilna i nemozes reci sto je prva grupa, a da ne prepoznas prvo tel.broj u stringu, ne vidim kako bi drukcije mogao to parsirati.

15 godina
odjavljen
offline
Re: Regex - pitanja i odgovori

Da, problem je što je CCCC ili CCCCCCCC broj (ajmo ga nazvat ID) koji može biti dužine od 4 do 8. Nakon njega, bez ikakvog separatora, ide tel. broj. Problem je što broj može doći ili kao lokalni (555-111), sa pozivnim (051/555-111) ili u nekom od internacionalnih formata (0038551555111 ili 38551555111).

 

Broj može biti bilo koji (riječ je o pozivu na centralu) a isto tako, ID može biti ili alfanumerički ili HEX.

 

Mi možemo forsirati trim tog IDa (kako i sada radimo) jer uvijek dolazi nakon dva whitespacea i bude minimalne dužine 4 chara. Ostatak do kraja stringa bude telefonski broj.

 

Koliko vidim, nema nikakvog rješenja...

My name is Legion... For we are many!
11 godina
neaktivan
offline
Regex - pitanja i odgovori

Ja se inace na poslu dosta bavim parsiranjem CDR-ova od raznih tel.centrala. Obicno bude nekakav jednoznacan nacin kako izvaditi pojedine podatke iz CDR-a. Ovaj format je dosta bedast.

Kazem, ima rjesenje, samo nije najsretnije. Trebalo bi imati listu svih prefiksa medjunarodnih tel.brojeva, nasih zupanijskih i tako dalje i sloziti nekakvu logiku prepoznavanja tel.broja unutar te poruke. Ali mislim da bi to bilo previse muke.

Moj PC  
0 0 hvala 0
15 godina
odjavljen
offline
Re: Regex - pitanja i odgovori

Ne može se sa nikakvom listom, problem je ovaj "ID" koji je varijabilne dužine i može biti bilo kakav HEX zapis. Može se dogoditi da npr ID bude 74433 a tel. broj 355 755.

 

Sa internacionalnim isto - ID 75533 a broj 387125456... Kad bi bar jedna od te dvije vrijednosti bila fiksna ili kad bi ovaj prijemnik uvijek puknuo broj u formatu 38x... (internacionalni), onda bi već nekako nešto izveli.

 

Da, format je bedast - to je prvi i osnovni problem. Pola dana sam tražio način da ubaci neki separator ili bilo šta poslije IDa i prije broja. Nema šanse.

My name is Legion... For we are many!
11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori
Sum_of_all_fears kaže...

Ne može se sa nikakvom listom, problem je ovaj "ID" koji je varijabilne dužine i može biti bilo kakav HEX zapis. Može se dogoditi da npr ID bude 74433 a tel. broj 355 755.

 

Sa internacionalnim isto - ID 75533 a broj 387125456... Kad bi bar jedna od te dvije vrijednosti bila fiksna ili kad bi ovaj prijemnik uvijek puknuo broj u formatu 38x... (internacionalni), onda bi već nekako nešto izveli.

 

Da, format je bedast - to je prvi i osnovni problem. Pola dana sam tražio način da ubaci neki separator ili bilo šta poslije IDa i prije broja. Nema šanse.

Gle, sigurno bi se mogao napraviti nekakav best guess tel.broja. Npr za prvi scenarij:

74433355755 - ako uzmes da je id 7443, onda ti ostaje tel.broj 3355755 i ispada da je tel.broj dugacak 7 znamenki, ali kod nas su cesci oni sa 6 znamenki i uzmes da je id 74433, a tel.broj 355755 - best guess.

Drugi scenarij:

75533387125456 - ako uzmes da je id 7553, tel.broj onda ispada 3387125456, sto bi mogao biti mobilni tel.broj, ali prefiks 338 ne postoji kod nas, pa ako povecas id za jednu znamenku na 75533, vidis da ti je tel.broj 387125456, pocinje sa prefiksom 387 koji ti je poznat, pa mozes pretpostaviti da je to tel.broj u toj poruci.

 

Mozes uvesti nekoliko tih kompliciranih uvjeta, ali nikad neces bit siguran da su tocni izracuni, ali bar ce, u vecini slucajeva, izracun tel.broja biti ok.

11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori

Po čemu znaš da je broj 654321555111 lokalni 555-111 s prefiksom 654321, a ne austrijski +43 2155 5111 s prefiksom 65?

Poruka je uređivana zadnji put čet 18.9.2014 20:30 (Bobobo-bo Bo-bobo).
11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...

Po čemu znaš da je broj 654321555111 lokalni 555-111 s prefiksom 654321, a ne austrijski +43 2155 5111 s prefiksom 65?

Zato jer je covjek rekao da je minimalna duzina id-a 4 znaka. I ponavljam, ovdje govorim o best guess-u!

11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori

Da li je 9999051555111

  • prefiks 9999051 + lokalni broj 555-111, ili
  • prefiks 9999 + broj s pozivnim 051/555-111

 

"Best guess" bi bila tri regularna izraza (za međunarodni format, za broj s pozivnim i za lokalni broj) i njihov prioritet u slučaju da više njih ima match. Ovo polovično rješenje ne daje uvijek točne rezultate, ali - garbage in, garbage out.

13 godina
neaktivan
offline
Regex - pitanja i odgovori

Trebam matchati sljedeci string: 'https://wdc-development.s3.amazonaws.com' </Themes> </Testimonials> </References> te </image.jpg>. Da pojasnim: prvi dio je uvijek isti znaci ovaj sa amazon serverom. Zatim iza toga moze doci /Themes ili /Testimonials ili /References te zatim forward slash te ime slike koje je bilo koje duljine te ekstenzija iste slike sto moze biti vjerojatno one najcesce tipa .jpeg, .jpg, .png itd... Primjer jednoga linka: 'https://wdc-development.s3.amazonaws.com/Themes/imageExample.jpg'.

 

Hvala unaprijed!!

Prodajem AMD x3 450 3.2 GHZ - 320kn!!
Moj PC  
0 0 hvala 0
12 godina
offline
Regex - pitanja i odgovori

U ovom ti slucaju ne treba regex, jednostavno rastavi string sa /, dobijes array stringova i onda ti je url rastavljeniString[0] + '//' + rastavljeniString[2], directory ti je rastavljeniString[3] a ime datoteke rastavljeniString[4]

(╯- , -)╯︵ ┻━┻
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Regex - pitanja i odgovori

Dobra ideja probati cu na taj nacin. Hvala!

Prodajem AMD x3 450 3.2 GHZ - 320kn!!
11 godina
neaktivan
offline
Re: Regex - pitanja i odgovori

Traženi regex je https://wdc-development\.s3\.amazonaws\.com/(Themes|Testimonials|References)/(.+)

13 godina
neaktivan
offline
Regex - pitanja i odgovori

Hvala stari!! U medjuvremenu sam rijesio a i requirement se promjenio no sve jedno hvala :) 

Prodajem AMD x3 450 3.2 GHZ - 320kn!!
Moj PC  
0 0 hvala 0
8 godina
neaktivan
offline
c# unos samo decimalnog broja u textbox

Kako da ogranicim unos u C# 6.0 u textBox.text samo poztivnih i negativnih celih i decimalnih brojeva a ne dozvoliti unos slova ili specijalnih znakova, kao u primeru
0.12 / -0.12
1,12 / -1.12
123.45 / -123.45
123,456.78 / -123,456.78
pa do recimo 1,234,567,890.12 / - 1,234,567,890.12
1 / -1
123 / -123
123,456,789.12 / -123,456,789.12

 

Naravno da sam upotrebio KeyPress, KeyDown i TryParse ali treba mi nesto kao Regex koji nisam uspeo da nateram da radi kako ja zelim. Resio sam problem tako sto sam posle priitisnutog Entera ispitao od zadnjeg clana ka prvom clanu i ubacio zarez na odgovarajuce mesto i novi takav niz prikazao u text.Boxu, takodje sam morao da dozvolim upotrebu Backspece i Delete tipki. Ovo je malo duzi objekat ja hocu da resim preko Regexa upotrebom paterne jednom naredbom ali za sada nisam uspeo.

 
0 0 hvala 0
7 godina
neaktivan
offline
Re: c# unos samo decimalnog broja u textbox

Pa ne radi se to tako, nego, ako me memorija dobro služi u C# postoji Mask ili MaskTextBox kontrola.

11 godina
neaktivan
offline
Re: c# unos samo decimalnog broja u textbox

Za te brojeve možeš koristiti ovaj regex:

 

-?\d{1,3}(,\d{3})*(\.\d+)?

 

ali mislim da ovo nećeš moći korisitit u KeyPress eventu jer izraz ne prihvaća napola ispravan unos. Npr. korisnik koji želi upisati "1.5" ne može otipkati točku nakon jedinice jer "1." nije dozvoljena vrijednost.

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice