2009-07-02 13 views
0

Ich möchte das Muster übereinstimmen: Beginnt mit 0 oder mehr Leerzeichen, gefolgt von "ABC", gefolgt von allem.Wie das in regulärem Ausdruck erstellt wird

So Dinge wie " ABC " " ABC111111" "ABC" würde übereinstimmen.
Aber Dinge wie " AABC" "SABC" würde nicht übereinstimmen.

Ich habe versucht:

String Pattern = "^\\s*ABC(.*)"; 

Aber es funktioniert nicht.

Irgendwelche Ideen? Dies ist übrigens in C#. Versuchen

+1

Ihr Muster richtig zu mir aussieht. Bist du sicher, dass es nicht funktioniert? –

+1

Ja, dieses Muster funktioniert auch für mich - vielleicht gibt es einen Fehler in Ihrem C# -Code. Können Sie den Code auch posten? –

Antwort

1

Die \\ setzt normalerweise einen umgekehrten Schrägstrich, so dass Ihre Lösung wahrscheinlich fehlschlägt. Es sei denn, Sie tun, ersetzen Sie die Klammern nicht brauchen um die .*

Auch \s Streichhölzer Zeichen außer dem Leerzeichen [ \t\n\f\r\x0B] oder Leerzeichen, Tabulator, Newline, Seitenvorschub, Rückkehr und Vertikaltabulator.

Ich würde vorschlagen:

String Pattern = @"^[ ]*ABC.*$"; 
+0

C# erfordert, dass Sie die Backslashes in Regexes wie diesem entkommen. – Tom

+0

Was bewirkt das Hinzufügen von @ vor dem Muster? – Saobi

+0

@ Saobi - Ein wörtliches Zeichenfolgenliteral besteht aus einem @ -Zeichen gefolgt von einem doppelten Anführungszeichen, null oder mehr Zeichen und einem schließenden Anführungszeichen. Ein einfaches Beispiel ist @ "Hallo". In einem wortgleichen String-Literal werden die Zeichen zwischen den Trennzeichen wortwörtlich interpretiert, die einzige Ausnahme ist eine quote-escape-Sequenz. Insbesondere werden einfache Escape-Sequenzen und hexadezimale und Unicode-Escapesequenzen nicht in wortgetreuen String-Literalen verarbeitet. Von http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx – JeffH

2

string pattern = @"\s*ABC(.*)"; // Using @ makes it easier to read regex. 

ich festgestellt, dass dies funktioniert auf regexpl.com

+0

Ist die Prüfung nicht zwingend vom Anfang der Zeile an? –

+0

Das^bedeutet, dass das Muster am Anfang der Zeile beginnt. – Kleinux

0

Seien Sie sicher, dass Sie die Regex-Engine gesetzt haben Single und nicht die Multiline zu verwenden.

1

ich diese getestet. Es klappt. Sie können RegexOptions.IgnoreCase auslassen, wenn nur Großbuchstaben ABC abgeglichen werden sollen.

/// <summary> 
/// Gets the part of the string after ABC 
/// </summary> 
/// <param name="input">Input string</param> 
/// <param name="output">Contains the string after ABC</param> 
/// <returns>true if success, false otherwise</returns> 
public static bool TryGetStringAfterABC(string input, out string output) 
{ 
    output = null; 

    string pattern = "^\\s*ABC(?<rest>.*)"; 

    if (Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase)) 
    { 
     Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); 
     output = r.Match(input).Result("${rest}"); 
     return true; 
    } 
    else 
     return false; 
} 

Telefonvorwahl:

static void Main(string[] args) 
{ 
    string input = Console.ReadLine(); 

    while (input != "Q") 
    { 
     string output; 
     if (MyRegEx.TryGetStringAfterABC(input, out output)) 
      Console.WriteLine("Output: " + output); 
     else 
      Console.WriteLine("No match"); 
     input = Console.ReadLine(); 
    } 
} 
Verwandte Themen