Регулярные выражения + Включение одного пробела в шаблон - PullRequest
3 голосов
/ 01 декабря 2011

Я пытаюсь выяснить, как написать шаблон для соответствия следующему: «3Z 5Z». Числа в этом могут варьироваться, но Z постоянны. Проблема, которую я имею, пытается включить пробел ... В настоящее время у меня есть это как мой шаблон

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

'*' представляет подстановочный знак для числа, предшествующего «Z», но, похоже, он не хочет работать с пробелом в нем. Например, я могу успешно использовать следующий шаблон для сопоставления одной и той же вещи без пробела (то есть 3Z5Z)

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

Я пишу эту программу в .NET 4.0 (C #). Любая помощь очень ценится!

РЕДАКТИРОВАТЬ: Этот шаблон является частью большой строки, например: 3Z 10Z замок 425 "

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Попробуйте:

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

Объяснение:

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

Кстати:

\b*

Должно выдать исключение.\b является якорем слова.Вы не можете определить это количественно.

1 голос
/ 01 декабря 2011

В дополнение к другим сообщениям я бы добавил символы начала и конца строки.

patter = "^\d+Z\s\d+Z$"
1 голос
/ 01 декабря 2011

Попробуйте этот код.

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();
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...