正则表达式分隔两个括号关闭项目

时间:2017-05-19 12:24:31

标签: c# asp.net regex

我需要分开以下数组:

[45645]
[5456]
[PB15] [DEC]
[PB16] []

使用正则表达式我需要找到以上列表:

[45645]   
[5456]  
[PB15]  
[PB16]   

我有以下正则表达式:\[(.*[0-9]*)\]

不幸的是,它选择了方括号内的所有项目。

5 个答案:

答案 0 :(得分:2)

不是一个非常详细的问题,只是

 ^[^\s]*

应该为你做。

它匹配任何空格(\s包括换行符)。

Check it out here at regex101

修改

正如Gawil指出的那样 - 可以缩短为^\S*。它意味着完全相同的东西,只是它更短。

答案 1 :(得分:1)

\[(.*[0-9]*)\]模式匹配[,然后匹配尽可能多的0+字符,然后是0+数字,然后是]。这意味着,如果您在一行中有多个[...],则它们将匹配为一个值,而这些[...]子字符串实际上不必包含任何位数。

如果您想在方括号中匹配<{1}}字符串 ,则可以使用

[...]

请参阅regex demo

<强>详情

  • \[[^][0-9]*[0-9][^][]*] - \[
  • [ - 除[^][0-9]*[和数字
  • 以外的0个字符
  • ] - 一位数字
  • [0-9] - 除[^][]*[
  • 以外的0个字符
  • ] - 单个文字]

C# demo

]

另外,您可以使用简单的var strs = new List<string> { "[45645]","[5456]","[PB15] [DEC]","[PB16] []"}; foreach (var str in strs) { var result = Regex.Matches(str, @"\[[^][0-9]*[0-9][^][]*]") .Cast<Match>() .Select(x => x.Value) .ToList(); foreach (var s in result) Console.WriteLine(s); } 正则表达式匹配\[[^][]+]子字符串(或[...],如果您只希望{{1}之间的单词字符匹配}和\[\w+]),但只抓取至少包含1位数的那些:

[

请参阅C# demo

答案 2 :(得分:0)

此模式将捕获每种情况下的数字,数字前面可以加上字母

\[\w*\d+\]

这是一个test

答案 3 :(得分:0)

我不确定您的行结尾是如何划分的,但这在大多数情况下都适用: ^ [(。*)〕

答案 4 :(得分:0)

你的正则表达式几乎没问题。您只需将其锚定在字符串的开头并打开多行标志(m):
^\[(.*[0-9]*)\]

然后你可以简化它:
^\[.*?\d*\]

演示here