2010-12-13 5 views
2

Kann jemand einen kurzen Satz innerhalb der Hauptsaite zurückholen? Ist es erforderlich, reguläre Ausdrücke zu verwenden?C# Wie kann man einen bestimmten Text in einer Zeichenfolge abrufen?

Ich versuche, den Text "Thu Dec 9 05:12:42 2010" abzurufen, der die Zeit von der Hauptsaite "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)" ist, die nach " Zeit "und vor" (UTC) ".

Ich bin auch neu in C# so leid für die einfache Frage.

Kann jemand einige C# -Methoden empfehlen oder anzeigen, die zum Abrufen des Texts verwendet werden können? Vielen Dank!

+0

Ist das Format festgelegt mit nur das Datum/Zeit unterschiedlich? In diesem Fall ist es einfach, den Text an der richtigen Stelle zu greifen. Sonst würden einige weitere Beispiele helfen. –

Antwort

3

Sie können einen regulären Ausdruck verwenden:

Match match = Regex.Match(text, @"Time (.*?)\(UTC\)"); 

Sie können dann den Teil Sie von match.Groups[1].Value wollen bekommen.

+0

Also ist der "Text" die Zeichenfolge, die ich RE verwenden möchte? – JavaNoob

+0

Wenn Sie ein Problem haben, das reguläre Ausdrücke erfordert, um es zu lösen ... haben Sie jetzt zwei Probleme. –

+0

Zuerst, um die gewählte Antwort zu antworten. Vielen Dank. – JavaNoob

1

Schauen Sie sich die Methoden System.String.Substring und System.String.Length an.

var logTime = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)"; 
logTime = logTime.Substring("LastWrite Time ".Length); 
logTime = logTime.Substring(0, logTime.Length - " (UTC)".Length); 

Dies sollte Ihnen näher bringen, was Sie suchen.

+0

Reps für die korrekte Antwort auch. Vielen Dank. – JavaNoob

0

Der folgende Code sollte Ihnen geben, was Sie wollen. Es ist nicht eine flexible Lösung und wird nur für dieses Szenario arbeiten:

String value = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)"; 

String newValue = value.Replace("LastWrite Time", "").Replace("(UTC)", "").Trim(); 

Für mehr Flexibilität, verwenden Regular Expressions.

1

Sie könnten reguläre Ausdrücke (Regex) verwenden, aber sie sind schwer zu verstehen. Die meisten Menschen halten es für schwierig, sie zu erstellen, es sei denn, Sie sind daran sehr gewöhnt. Wenn Sie mit regulären Ausdrücken vertraut sind, können Sie die Regex class studieren, die Regex in C# behandelt.

Allerdings ist das, was Sie versuchen, auch mit den üblichen Methoden der Klasse String möglich. Schauen Sie hinein und sehen Sie, welche Methoden Sie verwenden können.

Hauptsächlich Ihre Logik mit den Methoden der String-Klasse wäre zu bestimmen, ob Sie ein Muster in Ihren Sätzen haben. Versuchen Sie, allgemeine Elemente zu finden, die den Daten/Zeit-String umgeben, den Sie extrahieren möchten (Anfang und Ende). Verwenden Sie dann die Methode Substring(...). oder andere Methoden. Es kann auf verschiedene Arten erfolgen.

+0

+1, Gute Strategie zur Lösung dieser Probleme im Allgemeinen. –

0

ausprobieren, Wenn sich Ihr Text nur in einer String-Variablen befindet, können Sie die SubString() -Methode verwenden, um die Zeichenfolge abzurufen. Ex:

String str = "LastWrite Zeit Do 9. Dezember 05.12.42 2010 (UTC)"; strstring (15,23);

wird Ihnen Thu Dec 9 05:12:42 2010 als Ergebnis zurückgeben.

0

Ihr Problem ist im Wesentlichen String-Parsing.

Der einfachste Weg ist, nur die IndexOf und Substring-Methoden für die Zeichenfolge selbst zu verwenden. Dies funktioniert nur für sehr einfache Szenarien. Denken Sie daran, der String ist unveränderlich und diese Funktionen werden immer neue Strings zurückgeben, niemals das Original ändern.

Die nächste Ebene ist die Verwendung von regulären Ausdrücken, dies wird etwas komplexere Szenarien behandeln.

Der beste Weg ist die Verwendung eines vollständigen lexikalischen Analysewerkzeugs, das für das oben dargestellte Szenario wahrscheinlich übertrieben ist. Wäre es immer noch wert, nur zum Spaß zu schauen.

0

Dies ist ein ziemlich häufiges Problem, daher sollten Sie die String-Klasse mit einer flexiblen "Between" -Methode erweitern. Zuerst du wirst eine Erweiterungsklasse definieren:

public static class StringExtensions 
{ 
    /// <summary> 
    /// Returnes a substring located between a leading substring (head) and following substring(tail). 
    /// Return null if head or tail are not part of this string. 
    /// </summary> 
    /// <param name="mainString"></param> 
    /// <param name="head">leading substring</param> 
    /// <param name="tail">following substring</param> 
    /// <returns>ubstring located between head and tail</returns> 
    public static String Between(this string mainString, string head, string tail) 
    { 
     int HeadPosition; 
     int TailPosition; 
     int ResultPosition; 
     int ResultLenght; 
     //test if mainstring contains head and tail 
     if (!mainString.Contains(head) && mainString.Contains(tail)) 
     { 
      return null; 
     } 
     HeadPosition = mainString.IndexOf(head); 
     TailPosition = mainString.IndexOf(tail); 
     ResultPosition = HeadPosition + head.Length; 
     ResultLenght = TailPosition - ResultPosition; 

     return mainString.Substring(ResultPosition, ResultLenght); 
    } 
} 

Dann alles, was Sie tun müssen, ist die neue Methode auf eine beliebige Zeichenfolge aufrufen.

var logTime = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)"; 
logTime = logTime.Between("Time","(UTC)").Trim(); 

Bitte beachten Sie, dass „Zwischen“ wird nur dann zugänglich, wenn Sie den Namespace verwenden, die Sie definiert StringExtensions in.

Verwandte Themen