/ / Java Regular Expression corrisponde a uno o più caratteri nell'elenco: java, regex

Java Regular Expression corrisponde a uno o più caratteri nell'elenco: java, regex

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 № 1

Puoi 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.] - un x o .
    • [x.s]* - 0+ caratteri che sono entrambi x, . 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:

(d+[x. ]+)(d+)

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+)