Ho delle stringhe:
- totale 19xx.100
- totale 19x..100
- totale 19.100
- totale 19x .100
E voglio separare 19 con ("x" o "." Una o più volte) e 100. Ho provato a usare regex:
(x|.)+
raggruppare ma non può corrispondere a tutti i casi precedenti. Quale regex può corrispondere a tutti i casi sopra riportati?
risposte:
1 per risposta № 1Puoi usare
(d+)(s*[x.][x.s]*)(d+)
Vedere il regex demo
Dettagli
(d+)
- Gruppo 1: una o più cifre(s*[x.][x.s]*)
- Gruppo 2:s*
- 0+ spazi bianchi[x.]
- unx
o.
[x.s]*
- 0+ caratteri che sono entrambix
,.
o caratteri bianchi
(d+)
- Gruppo 3: una o più cifre
1 per risposta № 2
Puoi usare regex:
public static Matcher split(String text) {
Pattern pattern = Pattern.compile("(\d+)(x*)(\s*)(\.*)(\d+)");
Matcher matcher = pattern.matcher(text);
matcher.find();
return matcher;
}
Questa espressione regolare funziona per i dati di test:
19xx.100
19x.100
19..100
19x .100
Dopo di allora matcher.group(1)
sarà di ritorno 19
e matcher.group(5)
sarà di ritorno 100
1 per risposta № 3
Per il tuo esempio, puoi acquisire ciò che è prima di 100 e 100 in 2 gruppi di acquisizione:
Spiegazione
- Catturare il gruppo (gruppo 1)
(
- Abbina una o più cifre
d+
- Abbina una o più volte
x
,.
o spazio bianco[x. ]+
usando una classe di caratteri - Chiudi il gruppo di cattura
)
- Cattura in un gruppo (gruppo 2) una o più cifre
(d+)