2017-11-27 6 views
2

Ich habe einen Webdienst, den ich anrufe und der eine Liste mit Fehlermeldungen zurückgibt. Ich mache dann eine foreach über diese Liste und Matching basierend auf dem Text der Fehlermeldungen in einer Konfigurationsdatei. Einige der Fehlermeldungen, die vom Webdienst zurückgegeben werden, enthalten jedoch unbekannte Daten, z. B. ein Datum oder eine Nummer.Übereinstimmungszeichenfolge mit unbekanntem Text

Wie kann ich diesen Text mit C# übereinstimmen? Müsste ich die Zeichenfolge teilen und versuchen, jedes einzelne Wort zu vergleichen? Wie gehe ich mit einer unbekannten Variable wie einem Datum oder einer Zahl um, wenn ich ".Contains (...)" mache?

Hier ist ein Beispiel:

Web-Service-Liste könnte die

"This is an example static error message" 
"Another example static error message" 
"This is an error message for employee 2" 
"This is an error message dated 11/2/2017" 
"Employee 3 does not work here anymore" 

In meiner Konfigurationsdatei folgende Komponenten enthalten, habe ich folgendes: sie

<add errorText="This is an example static error message" field="N/A" /> 
<add errorText="Another example static error message" field="N/A" /> 
<add errorText="This is another example for employee **X**" field="N/A" /> 
<add errorText="This is an error message dated **X**" field="N/A" /> 
<add errorText="Employee **X** does not work here anymore" field="N/A" /> 

Antwort

2

Von Ihrer Konfigurationsdateien können Sie mit regulären Ausdrücken bauen wie folgt:

String configString = GetConfigString(3); // "This is another example for employee **X**" 
String regexPattern = String.Concat("^", configString.Replace("**X**", ".+"), "$"); 

Boolean match = Regex.IsMatch("This is another example for employee John", regexPattern); 

und dann verwenden, wie regex Ihren Text-Strings entsprechen.

Sie könnten auch so schnell wie Ihre Anwendung startet alle Ihre regulären Ausdruck Muster bauen und sie irgendwo für die zukünftige Verwendung zwischenzuspeichern:

String configStrings = GetConfigStrings(); 
String[] regexPatterns = new String[configStrings.Length]; 

for (Int32 i = 0; i < configStrings.Length; ++i) 
    regexPatterns[i] = String.Concat("^", configStrings[i].Replace("**X**", ".+"), "$"); 

Da Sie haben eine gemischte Art der möglichen String Ersatz in Ihrem Rahmen, Kleben zum .+ Token ist die bessere Wahl.

Natürlich liegt es an Ihnen, schließlich eine Konfigurationsdatei-Parser zu erstellen und und GetConfigStrings Methoden (oder nur eine, je nach der Methode, die Sie verwenden möchten) zu implementieren.

+1

'[A-Za-z] +' stimmt nicht mit der Nummer überein und '\\ 'im Datum – Xiaoy312

+0

Sie haben Recht! Vielen Dank! –

+0

Vielen Dank! Klappt wunderbar – JPitts

2

Sie können Regex verwenden übereinstimmen :

Regex.IsMatch(message, "This is another example for employee .+") 
Regex.IsMatch(message, "This is an error message dated .+") 
1

Wenn Sie nicht Regex Ansatz, wie ich, nehmen möchten, können Sie die bekannten Fehlermeldungen in eine HashSet hinzufügen und sie im Speicher behalten und dann suchen, welche Fehlermeldung am besten mit der Fehlermeldung auf der Hand, wie ein Spielstand.

Verwandte Themen