正则表达式来拉取方括号之间的值

时间:2010-10-28 16:59:54

标签: c# .net regex

我们假设我有以下文字:

“某事[234] [3243]”

我试图在方括号之间拉取值。我提出了以下正则表达式:.*\[(.*)\].*但是这只允许我拉出括号之间的最后一个值,在本例中为3243.如何提取所有值,这意味着在我的Match对象中获取更多组。

5 个答案:

答案 0 :(得分:3)

如果括号之间只允许使用数字,请使用

\[(\d+)\]

并使用the .Matches method所有匹配。

var theString = "something [234][3243]";
var re = new Regex(@"\[(\d+)\]");
foreach (Match m in re.Matches(theString)) {
   Console.WriteLine(m.Groups[1].Value);
}

(如果不仅允许使用数字,请改用\[([^]]+)\]。)

答案 1 :(得分:3)

        string s = "something[234][3243]";
        MatchCollection matches = Regex.Matches(s, @"(?<=\[)\d+(?=\])");
        foreach (Match m in matches)
        {
            Console.WriteLine(m.Value);
        }

你可以通过分组parens来做到这一点,但是如果你使用回顾并向前看,那么你就不需要将这些组拉出比赛了。

答案 2 :(得分:1)

如果你想搜索方括号之间的任何字符串而不仅仅是数字,那么你 可以使组模式变得懒惰(通过添加?)并执行此操作:

\[(.+?)\]

然后遍历所有匹配以命中所有括号内容(包含在捕获组中)。正如其他人所说,如果你添加前瞻和后视,那么匹配本身就是没有括号。

答案 3 :(得分:0)

您可以尝试:

\[(.*?)]

答案 4 :(得分:0)

我知道这不是一个JavaScript问题,但是这里是如何用JS做的,因为我不太了解C#。这不使用前瞻或后瞻,并匹配括号内的任何内容,而不仅仅是数字

var reg = /\[(\d+)\]/g;
var reg = /\[([^\]]+)\]/g;
var str = "something [234] [dog] [233[dfsfsd6]";

var matches = [];
var match = null;
while(match = reg.exec(str)) {
  // exec returns the first match as the second element in the array
  // and the next call to exec will return the next match or null
  // if there are no matches
  matches.push(match[1]);
}

// matches = [ "234", "dog", "233[dfsfsd6" ]