PDA

View Full Version : [JAVA] regexp


vladix
15-02-2008, 13:19
salve , srto cercando di estrare un double da una stringa , ma nn ci riesco a trovare il pattern giusto ,su qualche sito ho anche trovato dei programmini js che li creano ma nn vanno bene con java


([0-9]*\,[0-9]*)

isAlreadyInUse
15-02-2008, 13:42
replaceAll("[^0-9]", "");

andbin
15-02-2008, 13:50
salve , srto cercando di estrare un double da una stringa , ma nn ci riesco a trovare il pattern giusto ,su qualche sito ho anche trovato dei programmini js che li creano ma nn vanno bene con java Il pattern più semplice è "(\\d+,\\d+)"
(ciò che ho scritto è già la stringa literal, non la regex in sé)

uno o più digit, seguito da virgola, seguito da uno o più digit.

vladix
15-02-2008, 14:52
"(\\d+,\\d+)" va benissimo , thenc iu :D

vladix
16-02-2008, 12:04
ma se ad esempio ho una stringa

String sorcio = "data 13/11/2007 , domanda_12";


come faccio aed estare il numero 12?

io ho provato con

"(\\s{0}\\d{1,2})"
o
"(\\S\\d{1,2})"


questo dovrebbe estrare un numero di max 2 cifre senza spazi avanti , ma mi esce sempre il 13

Rubberick
16-02-2008, 12:49
"data\s+\d+/\d+/d+\s+,\s+domanda_(\d)" perlomeno con le perl posix dovresti poter usare questa maschera :D

ho usato le \s+ dove quegli spazi possono anche diventare tab...

cmq sia puoi anche scrivere ".*domanda_(\d)"

se sai che il numero della domanda e' compreso tra 00 e 99 a questo punto

substr(stringa,strlen(stringa)-2,2) ... nn so se sono quelle le funzioni in java xo' hai capito il senso :D

vladix
16-02-2008, 17:58
si ma nn voglio usare la substring

ho provato con

"_(\\d{1,2})\\s"


ma nn so come fare a escludere il "_" dalla selezione ,
so che c'e il pattern

(?:X)

che nn cattura , ma nn riesco a combinarli

andbin
16-02-2008, 22:15
ho provato con

"_(\\d{1,2})\\s"


ma nn so come fare a escludere il "_" dalla selezioneBeh, intanto hai già raggruppato il numero e quello è il group 1. Il group 0 è ovviamente tutto il match completo, quindi compreso _ e whitespace finale (vuoi davvero che ci sia un whitespace finale? nella tua stringa di esempio precedente non c'era).

Se vuoi catturare nel group 0 solo i digit, beh, si può fare ma devi tenere presente una cosa: non puoi usare il semplice non-capturing group che è (?:X) perché questo evita solamente che venga creato un nuovo gruppo 1 2 ecc.... Ma nel gruppo 0 che è tutto il match completo te lo ritroveresti comunque!

Devi usare i lookahead/lookbehind, la espressione diventa:

"(?<=_)\\d{1,2}(?=\\s)"

I lookahead/lookbehind semplicemente "guardano" avanti o indietro e sono per definizione non-capturing.

f0/\/2!3
10-03-2008, 12:15
Approfitto di questo topic per chiedere:

ho una stringa e voglio rimpiazzare ogni sottostringa che trovo fra i caratteri ">" e "<", come faccio? Il mio problema è che se sostituisco in quella maniera in

<document> <bookcategory> Non Java <book> <title>Algorithms in C++</title> <author>Robert Sedgewick</author> <publisher>Addison-Wesley</publisher> <isbn>0-201-51059-6</isbn> <pages>658</pages> <price>46.25</price> <recommendation>Buy It</recommendation> <blurb> This is the best book I know about basic algorithms and data structures. I refer to it frequently. </blurb> </book> <book> <title>The Design and Evolution of C++</title> <author>Bjarne Stroustrup</author> <publisher>Addison-Wesley</publisher> <isbn>0-201-54330-3</isbn> <pages>461</pages> <recommendation>Buy It</recommendation> <blurb> A fascinating look at why C++ is what it is, for better or worse, by the man who invented it. Even though Java is never mentioned, this book should convince convince you that C++ and Java really are two very different languages. </blurb> </book> </bookcategory></document>

mi ritrovo con

<document> </document>

wingman87
10-03-2008, 17:32
Quello che ti serve è leggere questa lezione: LINK (http://java.sun.com/docs/books/tutorial/essential/regex/quant.html)

Praticamente devi usare un "reluctant quantifier" tra i due '>' '<'.