Je suis en train d'analyser un fichier texte ligne par ligne, comment puis-je créer plusieurs collections de correspondance et tenter plusieurs correspondances sur chaque ligne traitée?Multiple matchcollections par ligne
Actuellement, je suis en train ceci:
while ((line = reader.ReadLine()) != null) {
string match1 = @"\s+([^)]*):entry:\s+cust\(([^)]*)\)\s+custno\(([^)]*)\)\s+id\(([^)]*)\)\s+name\(([^)]*)\)";
string match2 = @"group\(([^)]*)\)\s+spec\(([^)]*)\)\s+goodtill([^)]*)$";
string match3 = @"returns\(([^)]*)\)";
MatchCollection matches = Regex.Matches(line, match1);
MatchCollection matches2 = Regex.Matches(line, match2);
MatchCollection matches3 = Regex.Matches(line, match3);
foreach (Match matchr1 in matches)
{
line1.Add("Date:" + matchr1.Groups[1].Value + ", Customer:"
+ matchr1.Groups[2].Value + ", CustID:" + matchr1.Groups[3].Value +
", ID:" + matchr1.Groups[4].Value + ", Name:" + matchr1.Groups[5].Value);
}
foreach (Match matchr2 in matches2)
{
line2.Add("Group:" + matchr2.Groups[1].Value + ", Spec:" + matchr2.Groups[2].Value + ", Good Till:" + matchr2.Groups[3].Value);
}
foreach (Match matchr3 in matches3)
{
line3.Add("Returns: " + matchr3.Groups[1].Value);
}
}
Après le traitement du fichier et d'essayer de compter les tailles ArrayList:
MessageBox.Show(line1.Count + " " + line2.Count + " " + line3.Count);
je reçois 5000 0 0. Pourquoi mes 2 derniers ArrayLists vide? Il devrait y avoir beaucoup de matches, les regex sont confirmés corrects.
données Exemple:
LUCIE:496 27AUG120755:entry: cust(GUIR) custno(j010705) id(293746) name(mike)
LUCIE:496 27AUG120755: group(0000) spec(03) stripdn(N) pre228(N) goodtill 01/MAR/08
LUCIE:496 27AUG120755:getprotcode given (m000029374603MAR08), returns (TUUjFDEO)
Parce que les deuxième et troisième expressions régulières ne correspondent pas du tout? Nous ne pouvons pas vous donner une réponse définitive sans savoir à quoi ressemblent vos lignes. Avez-vous même regardé le contenu du lecteur et les collections pour vérifier que vous obtenez les résultats attendus? Pourquoi utilisez-vous ArrayLists? –
Assurez-vous que la ligne contient toujours du contenu après le premier appel à Regex.Matches. Une autre chose que j'ai remarquée sur l'API est que "La collection ne comprend que des correspondances réussies et se termine à la première correspondance infructueuse." La méthode pourrait-elle se terminer plus tôt? Pouvez-vous nous donner le fichier avec lequel vous testez? .... ref: http://msdn.microsoft.com/en-us/library/b9712a7w.aspx – Tom
@Jeff a confirmé regex dans regexbuddy avec des lignes associées. Le fichier contient des données confidentielles du client, je posterai des données d'échantillon. –