Pregunta

Estoy tratando de descubrir cómo escribir un patrón para que coincida con lo siguiente: "3Z 5Z". Los números en esto pueden variar, pero las z son constantes. El problema que tengo es tratar de incluir el espacio en blanco ... Actualmente tengo esto como mi patrón

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

El '*' representa el comodín para el número que precede a la "Z", pero no parece querer trabajar con el espacio en él. Por ejemplo, puedo usar el siguiente patrón con éxito para que coincida con lo mismo sin el espacio (es decir, 3Z5Z)

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

Estoy escribiendo este programa en .NET 4.0 (C#). ¡Cualquier ayuda es muy apreciada!

EDITAR: Este patrón es parte de una cadena más grande, por ejemplo: 3Z 10Z Lock 425 "

¿Fue útil?

Solución

Prueba esto:

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

Explicación:

"
\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
"

De paso:

\b*

Debería lanzar una excepción. \b es un ancla de palabra. No puedes cuantificarlo.

Otros consejos

Prueba este código.

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();
    }
  }
}

Además a otras publicaciones, agregaría caracteres del comienzo y el final de la cadena.

patter = "^\d+Z\s\d+Z$"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top