Suchen Sie einen bestimmten Text und die entsprechende E-Mail-ID aus der Mitte einer Zeichenfolge und speichern Sie sie in der Datentabelle oder in der Liste in C #
Ich habe eine Zeichenfolge wie unten
string error_message= "{\"2705\":\"Error importing username: 3167763, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\",\"10001\":\"Error importing username: 3195330, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\"}";
Aus der obigen Zeichenfolge muss ich den sich wiederholenden Text "Fehler beim Importieren des Benutzernamens:" finden und den Wert für den Benutzernamen daneben zusammen mit der entsprechenden E-Mail-ID nach dem Text "primäre E-Mail:" verwenden und in der Datentabelle mit der erwarteten Ausgabe wie unten speichern
Erwartetes Ergebnis in Datatable wie unten
username primary email
3167763 [email protected]
3195330 [email protected]
Unten ist das Codebeispiel, das ich habe, wo ich alle Benutzernamen in der Liste erhalten kann. Ich muss den folgenden Code ändern, um sowohl den Benutzernamen als auch die entsprechende primäre E-Mail-ID sowie eine Sammlung zu erhalten. Ihre Hilfe wird sehr nützlich sein
List<int> list = Regex.Matches(error_message, @"(?<=Error importing username: )\d+")
.Cast<Match>()
.Select(match => int.Parse(match.Value))
.ToList();
Antworten
Sie können ein Wörterbuch mit dem Benutzernamen als Schlüssel und der E-Mail-Adresse als Wert erstellen:
string pattern = @"Error importing username: (\d+), primary email: ([^,]+)";
var dict = Regex.Matches(error_message, pattern)
.Cast<Match>()
.ToDictionary(match => match.Groups[1], match => match.Groups[2]);
Das Muster enthält 2 Erfassungsgruppen, die in Klammern angegeben sind und zum Extrahieren des Benutzernamens und der E-Mail-Adresse aus jeder Übereinstimmung verwendet werden können.
Das E-Mail-Muster [^,]+
stimmt einfach mit einem oder mehreren Zeichen überein, die kein Komma sind. Es werden keine gültigen E-Mail-Adressen sichergestellt.
Wenn dies erforderlich ist, finden Sie hier weitere Details .
Arbeitsbeispiel
Anstatt ein einzelnes Lookbehind zu verwenden, können Sie zwei Erfassungsgruppen verwenden.
\bError importing username: (\d+), primary email: ([^\s@]+@[^\s@,]+)
Regex-Demo | C # -Demo
Zum Beispiel
string pattern = @"\bError importing username: (\d+), primary email: ([^\s@]+@[^\s@,]+)";
string input = @"string error_message= ""{\""2705\"":\""Error importing username: 3167763, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\"",\""10001\"":\""Error importing username: 3195330, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\""}"";";
var collection = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(match =>
new {username = int.Parse(match.Groups[1].Value), primary_email = match.Groups[2].Value}
);
foreach (var item in collection) {
Console.WriteLine("username: {0}, primary email: {1}",
item.username,
item.primary_email
);
}
Ausgabe
username: 3167763, primary email: [email protected]
username: 3195330, primary email: [email protected]