Frage

Ich versuche herauszufinden, wie man ein Muster schreibt, das mit Folgendem übereinstimmt: "3z 5z". Die Zahlen darin können variieren, aber die Zs sind konstant. Das Problem, das ich habe, ist, den White -Raum einzubeziehen ... derzeit habe ich dies als mein Muster

 pattern = @"\b*Z\s*Z\b";

Das '*' repräsentiert die Wildcard für die Zahl vor dem "z", aber es scheint nicht mit dem Raum darin zu arbeiten. Zum Beispiel kann ich das folgende Muster erfolgreich verwenden, um das gleiche ohne den Raum zu erreichen (dh 3Z5Z).

pattern = @"\b*Z*Z\b";

Ich schreibe dieses Programm in .NET 4.0 (C#). Jede Hilfe wird sehr geschätzt!

Bearbeiten: Dieses Muster ist Teil einer größeren Zeichenfolge, zum Beispiel: 3z 10z Lock 425 "

War es hilfreich?

Lösung

Versuche dies:

pattern = @"\b\d+Z\s+\d+Z\b";

Erläuterung:

"
\b    # Assert position at a word boundary
\d    # Match a single digit 0..9
   +     # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
Z     # Match the character “Z” literally
\s    # Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.)
   +     # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\d    # Match a single digit 0..9
   +     # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
Z     # Match the character “Z” literally
\b    # Assert position at a word boundary
"

Übrigens:

\b*

Sollte eine Ausnahme machen. \b ist ein Wortanker. Sie können es nicht quantifizieren.

Andere Tipps

Probieren Sie diesen Code aus.

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      string txt="3Z 5Z";

      string re1="(\\d+)";  // Integer Number 1
      string re2="(Z)"; // Any Single Character 1
      string re3="( )"; // Any Single Character 2
      string re4="(\\d+)";  // Integer Number 2
      string re5="(Z)"; // Any Single Character 3

      Regex r = new Regex(re1+re2+re3+re4+re5,RegexOptions.IgnoreCase|RegexOptions.Singleline);
      Match m = r.Match(txt);
      if (m.Success)
      {
            String int1=m.Groups[1].ToString();
            String c1=m.Groups[2].ToString();
            String c2=m.Groups[3].ToString();
            String int2=m.Groups[4].ToString();
            String c3=m.Groups[5].ToString();
            Console.Write("("+int1.ToString()+")"+"("+c1.ToString()+")"+"("+c2.ToString()+")"+"("+int2.ToString()+")"+"("+c3.ToString()+")"+"\n");
      }
      Console.ReadLine();
    }
  }
}

Ich habe zu anderen Beiträgen hinzugefügt. Ich würde Zeichen des Beginns und Ende der String hinzufügen.

patter = "^\d+Z\s\d+Z$"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top