2016-05-03 6 views
-1

Erste Post, so tut mir leid, wenn ich nicht genug Informationen zur Verfügung stellen, aber ich werde mein Bestes versuchen. Auch ist es wahrscheinlich klug zu beachten, dass ich nur minimale Kenntnisse davon habe, ich weiß im Grunde, was dieser Code tut und das ist es.Regex if Anweisung Probleme

Kurz gesagt, ich bin ein Mitglied oder eine Simulationsspielgemeinschaft, die hauptsächlich aus herumlaufen von der Polizei besteht. Das Spiel protokolliert alle Chat-Nachrichten, die direkt an eine .txt-Datei gesendet werden, und dieser Code durchsucht das Chatlog nach einem der im unten stehenden Code aufgeführten Parameter. Wenn es mit einem übereinstimmt, wird der entsprechende "Piep" abgespielt.

Die ersten beiden arbeiten aber die dritte Ich habe einige Kämpfe mit und fragte mich, ob jemand hier mir helfen könnte zu verstehen. Eines der Merkmale dieser „Bullen“ haben, ist eine Geschwindigkeit Waffe, die wie so Ergebnisse im Spiel zeigt:

user clocked @ 105kph/ 65mph• ignored *

user clocked @ 138kph/ 86mph• **

* das ist unterhalb der Geschwindigkeitsbegrenzung

** dies ist über der Geschwindigkeitsbegrenzung

jedoch im Chatlog erscheinen sie wie folgt aus:

user ^Lclocked @ 138kph/ 86mph• 

user ^Lclocked @ 63kph/ 39mph•^L ignored 

i variiert Wildcards haben versucht, (sie arbeiten unter der Annahme) und den Code in beiden Moden zu schreiben wie so:

Regex expspeeding = new Regex(@"mph• ", RegexOptions.IgnoreCase); 
Regex expspeeding = new Regex(@"#mph•^L ignored ", RegexOptions.IgnoreCase); 

, aber es funktioniert einfach nicht.

Unten ist der Hauptteil von dem, was ich habe, bitte, wenn jemand sogar eine Richtung vorschlagen kann, um darin zu gehen, würde sehr geschätzt werden.

Alle Fragen, die Sie haben, werde ich mein Bestes versuchen zu beantworten.

Danke für Ihre Zeit.

{ 
public partial class Form1 : Form 
{ 
    LogFileTracer tracer; 

    // The search patterns 
    Regex expdc = new Regex(@"Disconnected", RegexOptions.IgnoreCase); 
    Regex expidle = new Regex(@"You will be kicked soon", RegexOptions.IgnoreCase); 
    Regex expnospeeding = new Regex(@"?• ignored", RegexOptions.IgnoreCase); 


    public Form1() 
    { 
     InitializeComponent(); 


     tracer = new LogFileTracer(); 
     tracer.onTextReceived += Tracer_onTextReceived; 
    } 

    // Event if line was read from logfile 
    private void Tracer_onTextReceived(string text) 
    { 
     try 
     { 
      if (InvokeRequired) 
      { 
       // Thanks Microsoft for that threading bullcrap 
       this.Invoke(new LogFileTracer.TextReceivedDelegate(Tracer_onTextReceived), text); 
       return; 
      } 
     } 
     catch 
     { 
      // Nobody cares 
     } 

     if (text == null || text.Length == 0) return; 

     // Check whether any of the patterns match 
     if (expdc.IsMatch(text)) 
     { 
      // play sound pattern 
      txtEventLog.AppendText(text + "\r\n"); 
      Console.Beep(1000, 100); 
      Console.Beep(750, 100); 
      Console.Beep(500, 100); 

     } 
     else if (expidle.IsMatch(text)) 
     { 
      // play sound pattern 
      txtEventLog.AppendText(text + "\r\n"); 
      Console.Beep(2000, 50); 
      Console.Beep(2050, 50); 
      Console.Beep(2000, 50); 

     } 
     else if (expnospeeding.IsMatch(text)) 
     { 
      // play sound pattern 
      txtEventLog.AppendText(text + "\r\n"); 
      Console.Beep(1000, 50); 
      Console.Beep(2050, 50); 
      Console.Beep(2000, 50); 

     } 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     LblStatus.Text = "Logger Status: " + (tracer.isAlive ? "running" : "dead"); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     // Try to start the reader with the textbox 
     if (!string.IsNullOrEmpty(TxtFilename.Text)) tracer.start(TxtFilename.Text); 
    } 

    private void CmdStart_Click(object sender, EventArgs e) 
    { 
     // Start or restart the tracer 
     tracer.start(TxtFilename.Text); 
    } 

} 

}

+0

Der Code sieht aus wie C# nicht VB. Sie haben auch keine Frage gestellt. Kannst du etwas genauer sein? – peterG

+0

Nicht sicher, was Sie versuchen zu tun, aber dieses "? • ignored" ist kein gültiger Regex. – sln

Antwort

0

Sie könnten einen regex-Check für mph•$ tun. Dies entspricht allen Zeilen, die mit mph• enden, aber nicht mit denen, die das Schlüsselwort ignored enthalten.

0

Beschreibung

Wenn Sie für den folgenden Text

user ^Lclocked @ 138kph/ 86mph• 
user ^Lclocked @ 63kph/ 39mph•^L ignored 

Dann würde ich einen regulären Ausdruck wie diesen zu analysieren sind versuchen:

^user\s+\^Lclocked\[email protected]\s+([0-9]+)kph/\s*([0-9]+)mph[^\n\r]* 

, dass die Daten erfassen regex und setze sie so in die Fanggruppen:

  • Gruppe 0 wird die vollständige Zeichenfolge
  • Gruppe 1 den kph Wert
  • Gruppe 2 bekommt den mph Wert

Hinweis bekommt: Ich bin mit Fahnen für mehrzeilige und Groß- und Kleinschreibung.

Probe Spiele

[0][0] = user ^Lclocked @ 138kph/ 86mph• 
[0][1] = 138 
[0][2] = 86 

[1][0] = user ^Lclocked @ 63kph/ 39mph•^L ignored 
[1][1] = 63 
[1][2] = 39 

erklärt

Regular expression visualization

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    user      'user' 
---------------------------------------------------------------------- 
    \s+      whitespace (\n, \r, \t, \f, and " ") (1 or 
          more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    \^      '^' 
---------------------------------------------------------------------- 
    Lclocked     'Lclocked' 
---------------------------------------------------------------------- 
    \s+      whitespace (\n, \r, \t, \f, and " ") (1 or 
          more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    @      '@' 
---------------------------------------------------------------------- 
    \s+      whitespace (\n, \r, \t, \f, and " ") (1 or 
          more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    [0-9]+     any character of: '0' to '9' (1 or more 
          times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    kph/      'kph/' 
---------------------------------------------------------------------- 
    \s*      whitespace (\n, \r, \t, \f, and " ") (0 or 
          more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
    [0-9]+     any character of: '0' to '9' (1 or more 
          times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
)      end of \2 
---------------------------------------------------------------------- 
    mph      'mph' 
---------------------------------------------------------------------- 
    [^\n\r]*     any character except: '\n' (newline), '\r' 
          (carriage return) (0 or more times 
          (matching the most amount possible))