我们假设我有以下文字:
“某事[234] [3243]”
我试图在方括号之间拉取值。我提出了以下正则表达式:.*\[(.*)\].*
但是这只允许我拉出括号之间的最后一个值,在本例中为3243.如何提取所有值,这意味着在我的Match对象中获取更多组。
答案 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" ]