Регулярное выражение для сопоставления чисел в скобках внутри квадратных скобок с необязательным текстом - PullRequest
5 голосов
/ 18 июня 2009

Во-первых, я здесь на C #, так что я имею дело с RegEx. И вот что мне нужно, чтобы соответствовать:

[(1)]

или

[(34) Some Text - Some Other Text]

Так что в основном мне нужно знать, является ли то, что находится в скобках, числовым, и игнорировать все, что находится между закрывающей скобкой и квадратной скобкой. Любые гуру RegEx хотят помочь?

Ответы [ 7 ]

16 голосов
/ 18 июня 2009

Это должно работать:

\[\(\d+\).*?\]

А если вам нужно поймать число, просто оберните \d+ в скобки:

\[\((\d+)\).*?\]
1 голос
/ 22 июня 2013

В этой ситуации регулярное выражение выглядит излишним. Вот решение, которое я использовал в итоге.

var src = test.IndexOf('(') + 1;
var dst = test.IndexOf(')') - 1;
var result = test.SubString(src, dst-src);
1 голос
/ 18 июня 2009

Вы должны соответствовать []? Вы можете сделать только ...

\((\d+)\)

(сами числа будут в группах).

Например ...

var mg = Regex.Match( "[(34) Some Text - Some Other Text]", @"\((\d+)\)");

if (mg.Success)
{
  var num = mg.Groups[1].Value; // num == 34
}
  else
{
  // No match
}
0 голосов
/ 18 июня 2009

Как это? Предполагая, что вам нужно только определить, соответствует ли строка совпадению, и не нужно извлекать числовое значение ...

        string test = "[(34) Some Text - Some Other Text]";

        Regex regex = new Regex( "\\[\\(\\d+\\).*\\]" );

        Match match = regex.Match( test );

        Console.WriteLine( "{0}\t{1}", test, match.Success );
0 голосов
/ 18 июня 2009

В зависимости от того, что вы пытаетесь достичь ...

List<Boolean> rslt;
String searchIn;
Regex regxObj;
MatchCollection mtchObj;
Int32 mtchGrp;

searchIn = @"[(34) Some Text - Some Other Text] [(1)]";

regxObj = new Regex(@"\[\(([^\)]+)\)[^\]]*\]");

mtchObj = regxObj.Matches(searchIn);

if (mtchObj.Count > 0)
    rslt = new List<bool>(mtchObj.Count);
else
    rslt = new List<bool>();

foreach (Match crntMtch in mtchObj)
{
    if (Int32.TryParse(crntMtch.Value, out mtchGrp))
    {
        rslt.Add(true);
    }
}
0 голосов
/ 18 июня 2009

Как насчет "^ \ [\ ((d +) \)" (стиль perl, не знакомый с C #). Вы можете спокойно игнорировать остальную часть строки, я думаю.

0 голосов
/ 18 июня 2009

Что-то вроде:

\[\(\d+\)[^\]]*\]

Возможно, потребуется еще побег?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...