fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Ho una lista di nomi in un file.txt
Carico il file nella var _line
ora a me serve che il nome prenda la struttura di una email cosi':
nomelista@dominio.ext:nomelista
non mi interessa scrivere un dominio.ext vero e proprio
a me interessa piu' che altro capire la struttura della REGEX che da un
nomelista
trasformi in
nomelista@dominio.ext:nomelista
non essendoci http://, come catturo il nome, avendo solo @ ?
Si puo' fare?
Ciao
Ultima modifica effettuata da fusebyte il 14/11/2012 alle 23:39 |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Non mi sembra il caso di usare una regex, basta scrivere _line+"@dominio.ext:"+_line, no?
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
.......giusto....ma cosa sto dicendo...scusami.
Preso dalle REGEX ho fatto un ragionamento del tutto sballato.
Cmq ,Grazie ancora per l'aiuto.
Ciao
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
@Roby o Nessuno, una cortesia, nel Visual C#, usando REGEX o meno, come posso togliere parti numeriche a len variabile, iniziali o finali di una stringa ma non se il numero è contenuto dentro la stringa stessa?
es:
12111988Maria1
1988Maria1
e quindi ripulire la parte numerica a prescindere se sia data di nascita, codice progressivo o altro ed ottenere
Maria
Maria
se invece esistesse dentro la stringa una parte numerica, poterla salvare con la stringa stessa.
es:
09011973Piero1&Paolo2
1973Piero1&Paolo2
ed ottenere
Piero1&Paolo
Piero1&Paolo
Grazie Anticipate,Ciao
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Secondo me (ne sono quasi certo) eiste un modo per eseguire questa operazione interamente con le regex ma adesso sul momento non mi viene....
Comunque puoi adoperare questa tecnica:
-Esegui questa regex "^[0-9]*(.*)$" e prelevi il gruppo 1 eliminando tutto il resto, devi usare il replace e mettere $1 come replace
-Ribalti la stringa, questo è semplice visto che puoi usare un array di char
-Riesegui la regex
-Ribalti nuovamente la stringa
Cosi ottieni il risultato voluto... Mi devo scervellare per trovare la regex giusta che risolva tutto in un solo passaggio :\ sono sicuro di averla gia vista....
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Grazie per la tua risposta.
Il problema, essendo, spesso una lista,e lavorando pochissimo su stringhe uniche, è che non so a priori se hanno inserito un numero identificativo assieme al nome o no e sopratutto che valore è stato inserito.
Ti domando,mettendo $1 varrebbe solo in questo specifico caso,credo?
Per farti un altro esempio diciamo che abbiano inserito
IDprogressivo , nome , data.nomevianumero o anno.iscrizione, es:
180Mario1970-180Rossi,viananni15a e pulendo i dati, dovrebbe uscire
Mario-Rossi,viaNanni15a
qui il 15 è dentro la stringa, quindi lo tengo , se fosse invece
180Mario1970-Rossi.iscrizione.anno1995
il risultato sarebbe senza il 1995 perche' finale di stringa
Mario-Rossi.iscrizione.anno
spero di non avertela fatta troppo complicata.
Riassumendo un un punto solo
Carico una lista, se e solo sono presenti numeri all'inizio e/o alla fine di una o piu' parole su una linea , li vado ad eliminare, preservando eventuali numeri interni alla parola.
Quindi $1 dovrei modificarlo con un riferimento generale? ..non so $digits ( ma non ho proprio idea di come impostare il valore di digits)
Cmq faccio due prove con quello che mi hai consigliato.
Grazie per ora
Ciao
ps:
Ribalti la stringa, questo è semplice visto che puoi usare un array di char |
Potresti farmi un esempio su come ribaltare la stringa,a dirti la verita' non ho capito bene questo punto della procedura.
Tk's Ultima modifica effettuata da fusebyte il 26/11/2012 alle 0:52 |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Facciamo che ti spiego come funziona l'algoritmo che ti ho descritto:
Partiamo da una stringa es 180Mario1970-Rossi.iscrizione.anno1995 applichiamo il replace con la regex sopra citata
questa preleverà un gruppo, in particolare quello situato immediatamente dopo i numeri all'inizio della stringa (funziona anche se non vi sono numeri all'inizio) e lo restituisce cosi otterrai Mario1970-Rossi.iscrizione.anno1995. Secondo passaggio inverti la stringa (o ribalti come preferisci) 5991onna.enoizircsi.issoR-0791oiraM. Riapplichi il primo passaggio eliminando i numeri all'inizio della stringa onna.enoizircsi.issoR-0791oiraM. A questo punto non ti resta che ribaltare di nuovo la stringa ed hai finito Mario1970-Rossi.iscrizione.anno
Qui di seguito puoi vedere un codice di esempio:
Codice sorgente - presumibilmente C# / VB.NET |
string stringN = "180Mario1970-Rossi.iscrizione.anno1995";
stringN = System.Text.RegularExpressions.Regex.Replace(stringN, "^[0-9]*(.*)$", "$1");
stringN = new string(stringN.Reverse().ToArray());
stringN = System.Text.RegularExpressions.Regex.Replace(stringN, "^[0-9]*(.*)$", "$1");
stringN = new string(stringN.Reverse().ToArray());
|
Spero di essere stato chiaro
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Provo subito.
Devo fare piu passaggi allora, se vedi l'esempio
180Mario1970-Rossi.iscrizione.anno1995
il risultato sarebbe senza il 1995 perche' finale di stringa
Mario-Rossi.iscrizione.anno
devo togliere anche il 1970 che non è dentro la parola. |
Quindi
1° passaggio come hai detto
poi devo girare Mario e togliere il 1970
rimetto a posto, prendo in esame la seconda stringa e se sono presenti numeri li tolgo
rigiro la stringa , tolgo il 1995 e rimetto a posto.
Se fosse una lista sostanziosa, tutti questi passaggi potrebbero appensatire ed influire sulla velocita' di filtraggio?
Mille Grazie , Roby Ultima modifica effettuata da fusebyte il 27/11/2012 alle 0:18 |
|