2015-01-21 12 views
5

prega ho una stringa come questa RemoteAuthorizationTestScope | inizio: en attente convalida |: 001 |: 01195 | 21/01/2015necessario estrarre stringhe da un separatore in C#

posso estrarre la stringa dal | simbolo utilizzando questo codice

var userInfo="RemoteAuthorizationTestScope|Start:En Attente Validation|:001|:01195|21/01/2015" 
var entries=userInfo.Split('|'); 

Tuttavia, ci sono anche il testo come "Start: en attente convalida" nella stringa che deve essere separato, come faccio a raggiungere questo obiettivo in modo che io possa avere la stringa separato in questo modo .

RemoteAuthorizationTestScope 
Start 
En Attente Validation 
001 
01195 
21/01/2015 

risposta

15

È possibile specificare più caratteri da dividere e rimuovere anche voci vuote. Utilizzare il String.Split overload come:

var entries = userInfo.Split(new []{'|', ':'}, StringSplitOptions.RemoveEmptyEntries); 

che vi darà

RemoteAuthorizationTestScope 
Start 
En Attente Validation 
001 
01195 
21/01/2015 
+0

Questo funziona abbastanza bene ... anche all'interno della stringa ho questo "Start: En Attente Validation" come posso ottenere solo una stringa dopo il carattere della colonna ':'? – user989865

+1

@ user989865, in quel caso particolare, prima dividerlo su '|' e poi per ogni stringa restituita controllare ':' e dividere su quello, se la lunghezza dell'array restituita è 2, quindi restituire il secondo elemento. – Habib

+0

prima sostituire le parole ridondanti con string.Empty, quindi dividerlo –

0

Compreso il vostro ulteriore richiesta:

"Start: en attente convalida" come posso ottenere solo stringa dopo la colonna carattere ':'?

È possibile farlo in un unico passaggio con una regex: \|(?:[^:]*:)?

var userInfo = 
    "RemoteAuthorizationTestScope|Start:En Attente Validation|:001|:01195|21/01/2015"; 

var entries = System.Text.RegularExpressions.Regex.Split(userInfo, "\\|(?:[^:]*:)?"); 

risultati in:

String[] 
[ 
    "RemoteAuthorizationTestScope", 
    "En Attente Validation", 
    "001", 
    "01195", 
    "21/01/2015" 
] 

esempio di lavoro: https://dotnetfiddle.net/D5ggvH

+0

Grazie a gremac, un'ultima cosa però ... per la stringa "Start: En Attente Validation" è una stringa dinamica che a un certo punto potrebbe includere solo "Start" o Start : En Attente Validation o "Start: En Attente Validation: Complete", per favore come posso estrarre solo la stringa "Start" se questo è l'unico testo esistente. – user989865

+0

L'esempio che ho fornito estrae tutti questi esempi; usa il link dotnetfiddle per giocare con il testo di input. Se ci fosse un oggetto che contenesse solo "... | Start: | ..." sarebbe vuoto .. questa è la sfida di questo tipo di cose, non conosco tutte le possibili variazioni o quanto sia robusto questo bisogno essere. Ti incoraggerei a imparare e comprendere la regex in modo da poterti regolare come necessario: qualcosa come dotnetfiddle (o [LINQPad] (https://www.linqpad.net) se vuoi un'applicazione nativa) è ottimo per questo. – gregmac

Problemi correlati