我需要分开以下数组:
[45645]
[5456]
[PB15] [DEC]
[PB16] []
使用正则表达式我需要找到以上列表:
[45645]
[5456]
[PB15]
[PB16]
我有以下正则表达式:\[(.*[0-9]*)\]
不幸的是,它选择了方括号内的所有项目。
答案 0 :(得分:2)
不是一个非常详细的问题,只是
^[^\s]*
应该为你做。
它匹配任何空格(\s
包括换行符)。
修改强>
正如Gawil指出的那样 - 可以缩短为^\S*
。它意味着完全相同的东西,只是它更短。
答案 1 :(得分:1)
\[(.*[0-9]*)\]
模式匹配[
,然后匹配尽可能多的0+字符,然后是0+数字,然后是]
。这意味着,如果您在一行中有多个[...]
,则它们将匹配为一个值,而这些[...]
子字符串实际上不必包含任何位数。
如果您想在方括号中匹配<{1}}字符串 ,则可以使用
[...]
请参阅regex demo
<强>详情:
\[[^][0-9]*[0-9][^][]*]
- \[
[
- 除[^][0-9]*
,[
和数字]
- 一位数字[0-9]
- 除[^][]*
和[
]
- 单个文字]
。]
另外,您可以使用简单的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)
答案 3 :(得分:0)
我不确定您的行结尾是如何划分的,但这在大多数情况下都适用: ^ [(。*)〕
答案 4 :(得分:0)
你的正则表达式几乎没问题。您只需将其锚定在字符串的开头并打开多行标志(m):
^\[(.*[0-9]*)\]
然后你可以简化它:
^\[.*?\d*\]
演示here