正则表达式匹配方括号内的括号内的数字和可选文本

时间:2009-06-17 21:35:13

标签: c# regex

首先,我在C#这里,这就是我正在处理的RegEx的味道。以下是我需要能够匹配的事情:

[(1)]

[(34) Some Text - Some Other Text]

所以基本上我需要知道括号之间的数字是否为数字,并忽略右括号和近方括号之间的所有内容。任何RegEx大师都在关心帮助吗?

7 个答案:

答案 0 :(得分:16)

这应该有效:

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

如果您需要捕获数字,只需将\d+括在括号中:

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

答案 1 :(得分:1)

你必须匹配[]吗?你能做到吗......

\((\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
}

答案 2 :(得分:1)

在这种情况下,正则表达式似乎有些过分。这是我最终使用的解决方案。

var src = test.IndexOf('(') + 1;
var dst = test.IndexOf(')') - 1;
var result = test.SubString(src, dst-src);

答案 3 :(得分:0)

类似的东西:

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

可能需要更多的逃避?

答案 4 :(得分:0)

怎么样“^ \ [\((d +)\)”(perl风格,不熟悉C#)。我认为你可以安全地忽略其余部分。

答案 5 :(得分:0)

取决于你想要完成的事情......

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

答案 6 :(得分:0)

这是怎么回事?假设您只需确定字符串是否匹配,并且无需提取数值...

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