Ho la mia configurazione come [HEADER].{3}$[.FOOTER]
Ho bisogno di leggere questa configurazione e preparare un array 2-D dove stringa tra [] è valore e stringa senza [] è una regex da applicare.
Come posso dividere la stringa sopra per ottenere questo array.
L'idea è di ottenere:
IsRegEx Value
0 [HEADER]
1 .{3}$
0 [.FOOTER]
In modo che io possa applicare regex a index-1th
valore e concat array torna alla stringa risultante.
Ho provato a usare
string input = "[HEADER].{3}$[.FOOTER]";
char[] delimiterChars = { "[", "]"};
string[] words = input.Split(delimiterChars);
Ma ciò rimuove [] e non è più possibile quindi distinguere tra il valore effettivo e il modello regex nella stringa data.
string[] parts = Regex.Split(input , @"(?<=[.,;])")
potrebbe aver funzionato se lo splitter fosse .,;
risposte:
0 per risposta № 1Puoi usare questo esempio:
string input = "[HEADER].{3}$[.FOOTER]";
Regex rx = new Regex(@"(?<header>[.*])(?<body>.*)(?<footer>[.*])");
Match m = rx.Match( input );
Quindi raccogli i contenuti dei gruppi con
m.Groups[ "header" ]
m.Groups[ "body" ]
m.Groups[ "footer" ]
* MODIFICARE * Per più istanze, puoi provare questo
string input = "[HEADER].{3}$[.FOOTER][.HEADER2].{2}$[.FOOTER2]";
Regex rx = new Regex(@"G(?<header>[[^]]*?])(?<body>[^[]*?)(?<footer>[[^]]*?])", RegexOptions.Multiline);
Match m = rx.Match( input );
while( m.Success )
{
m = m.NextMatch();
}
0 per risposta № 2
Questa espressione regolare troverà qualsiasi numero di valori di intestazione e piè di pagina (presumendo che tu non abbia nulla di troppo complicato, come parentesi annidate o di escape):
var input = "[HEADER].{3}$[.FOOTER][.HEADER2].{2}$[.FOOTER2]";
var headersAndFooters = Regex.Matches(input, @"[.*?]");
Quindi puoi calcolare ciò che è intermedio usando gli indici e le lunghezze delle corrispondenze (ad esempio nell'esempio sopra, gli spazi tra 8 e 13 sono la prima espressione regolare), o questa espressione regolare:
var regexes = Regex.Matches(input, @"(?<=(]|^))[^]]+?(?=[|$)");