View Full Version : [JAVA] regexp
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]", "");
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.
"(\\d+,\\d+)" va benissimo , thenc iu :D
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
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
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 '>' '<'.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.