[Scala] Creare una regex per una sostituzione di stringa

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

[Scala] Creare una regex per una sostituzione di stringa

Messaggio da DoctorStrange »

Buonasera a tutti,

Programmo in scala su framework Spark ed avrei bisogno di scoprire la sintassi esatta per fare una semplice string replace usando scala come linguaggio di programmazione.

il presupposto è questo: Ho una serie di stringhe di questo tipo:

Codice: Seleziona tutto

AC122GE-P,AC126GE-P,AC128GE-P...
In pratica queste stringhe sono formate da due caratteri iniziali costanti: "AC", seguiti da tre costanti numeriche che possono variare in qualunque modo, ma sapendo che sono sempre solo tre "122, 126, 128..." e sono poi seguiti da altri tre caratteri costanti: "GE-P".

Io vorrei trasformare queste stringhe inserendo semplicemente uno spazio dopo i tre numeri, in questo modo:

Codice: Seleziona tutto

AC122 GE-P,AC126 GE-P,AC128 GE-P...
Per farlo ho provato prima a definire una regex:

Codice: Seleziona tutto

val regex : scala.util.matching.Regex = "AC([0-9]re{3})GE-P".r;
Ho poi definito la tupla di prova:

Codice: Seleziona tutto

val testo : (String, String, String) = ("AC122GE-P","AC126GE-P","AC128GE-P");
Ho poi provato ad applicare:

Codice: Seleziona tutto

println(regex.findAllIn(testo._1).mkString(", "));
Ma non ottengo quello che voglio.

Qualcuno qui conosce un po scala, e mi sa aiutare?

Grazie mille.
Ultima modifica di DoctorStrange il lunedì 17 maggio 2021, 19:30, modificato 1 volta in totale.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1703
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da korda »

Non ho mai sentito un linguaggio di programmazione chiamato "scala". Hai qualche risorsa da linkare?
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da DoctorStrange »

Scala = "scalable language".
https://users.scala-lang.org/
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da vaeVictis »

A prescindere dallo specifico linguaggio, se devi inserire uno spazio sempre nella stessa posizione, non puoi direttamente modificare la stringa indicizzandola?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da DoctorStrange »

vaeVictis ha scritto:
martedì 18 maggio 2021, 7:31
A prescindere dallo specifico linguaggio, se devi inserire uno spazio sempre nella stessa posizione, non puoi direttamente modificare la stringa indicizzandola?
Non ho capito cosa intendi. Che vuoi dire con "indicizzandola"? Faresti un esempio concreto? Grazie
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da vaeVictis »

Te lo posso fare in Python, sperando che sia utile:

Codice: Seleziona tutto

>>> stringa = "AC122GE-P"
>>> stringa[0:5] + ' ' + stringa[5:]
'AC122 GE-P'
>>> stringa = "AC126GE-P"
>>> stringa[0:5] + ' ' + stringa[5:]
'AC126 GE-P'
Questo immaginando che esistano anche in Scala le operazioni su stringa.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da DoctorStrange »

Ah si non è male come idea. Posso usare "flatten" per separare la stringa nei suoi caratteri e poi aggiungere lo spazio.

Piu tardi provo.

Grazie per l'idea.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1703
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da korda »

vaeVictis ha scritto:
martedì 18 maggio 2021, 8:41
Te lo posso fare in Python, sperando che sia utile:

Codice: Seleziona tutto

>>> stringa = "AC122GE-P"
>>> stringa[0:5] + ' ' + stringa[5:]
'AC122 GE-P'
>>> stringa = "AC126GE-P"
>>> stringa[0:5] + ' ' + stringa[5:]
'AC126 GE-P'
Questo immaginando che esistano anche in Scala le operazioni su stringa.
In Python questa soluzione è molto smart, bisogna però vedere se anche Scala supporta il casting dinamico (se è un linguaggio "moderno" questa osservazione sarebbe superflua)
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da vaeVictis »

Perché serve il casting dinamico? Non capisco
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da crap0101 »

btw, mi sembra un semplice problema di regex

Codice: Seleziona tutto

scala> val s = "AC122GE-P,AC126GE-P,AC128GE-P"
s: String = AC122GE-P,AC126GE-P,AC128GE-P

scala> val d = "(AC)([0-9]{3})(GE-P)".r
d: scala.util.matching.Regex = (AC)([0-9]{3})(GE-P)

scala> d.findAllIn(s).toList
res14: List[String] = List(AC122GE-P, AC126GE-P, AC128GE-P)

scala> d.replaceAllIn(s, _ match { case d(a,b,c) => f"$a$b $c" })
res15: String = AC122 GE-P,AC126 GE-P,AC128 GE-P

http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2854
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da DoctorStrange »

Ti ringrazio Crap. Vedo che hai usato una match-case. Non mi è però molto chiaro, come funzioni nel caso che hai pubblicato. Cosa significa, in particolare: "d(a,b,c) => f"$a$b $c" }"?

@Korda.
Ho provato anche il tuo metodo, ma mi sono reso contro che non tutte le stringhe sono uguali, e quindi non posso usare un indice costante.
Comunque lo terrò a mente per applicazioni future.

Grazie
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [Scala] Creare una regex per una sostituzione di stringa

Messaggio da crap0101 »

per estrarre i gruppi che matchano la regex e riformattarli diversamente... che poi pensavo: se la stringa ha sempre quel formato basta anche solo cercare 3 cifre non seguite dallo spazio

Codice: Seleziona tutto

scala> val s = "AC122GE-P,AC126GE-P,AC128GE-P"
s: String = AC122GE-P,AC126GE-P,AC128GE-P

scala> val d = raw"([0-9]{3})(?!\s)".r
d: scala.util.matching.Regex = ([0-9]{3})(?!\s)

scala> d.replaceAllIn(s, "$1 ")
res7: String = AC122 GE-P,AC126 GE-P,AC128 GE-P
o ancora più specifico

Codice: Seleziona tutto

scala> val d = "(122|126|128)".r
d: scala.util.matching.Regex = (122|126|128)

scala> d.replaceAllIn(s, "$1 ")
res8: String = AC122 GE-P,AC126 GE-P,AC128 GE-P
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 10 ospiti