【问题标题】:Regex to separate two bracket closed items正则表达式分隔两个括号封闭的项目
【发布时间】:2017-05-19 12:24:31
【问题描述】:

我需要分离以下数组:

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

使用正则表达式,我需要在上面的列表中找到以下内容:

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

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

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

【问题讨论】:

  • 怎么样:\[[^\]]+\]
  • 那么,[...] 中必须至少有 1 位数字?使用\[[^][0-9]*[0-9][^][]*]
  • @Toto: 也匹配 [DEC]。
  • \[([^\]]*[0-9]+)\] 将选择以数字结尾的每个项目。
  • 你真的需要正则表达式吗?或者只是你想做这个任务?

标签: c# asp.net regex


【解决方案1】:

不是很详细的问题,只是简单

 ^[^\s]*

应该为你做。

它匹配最多为空格的任何内容(\s 包括换行符)。

Check it out here at regex101.

编辑:

正如 Gawil 指出的那样 - 可以缩短为 ^\S*。它的意思完全一样,只是它更短。

【讨论】:

  • 您可以将其简化为^\S*
  • @Gawil Tru dat :​​)
【解决方案2】:

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

如果你想匹配[...]在方括号中包含至少1位数字任何地方的字符串,你可以使用

\[[^][0-9]*[0-9][^][]*]

regex demo

详情

  • \[ - 一个[
  • [^][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);
}

或者,您可以使用简单的\[[^][]+] 正则表达式来匹配[...] 子字符串(或\[\w+],如果您只希望在[] 之间有单词字符),但是只抓取至少包含 1 个数字的那些:

var result = Regex.Matches(str, @"\[[^][]+]") // Pattern may be \[\w+]
        .Cast<Match>()
        .Select(x => x.Value)
        .Where(m => m.Any(Char.IsDigit))   // Here, check if there is at least 1 digit
        .ToList();

C# demo

【讨论】:

  • 正是我的意思!感谢您的宝贵建议!
【解决方案3】:

此模式将捕获所有情况下的数字,并且数字前面可以有字母

\[\w*\d+\]

这是test

【讨论】:

    【解决方案4】:

    我不确定你的行尾是如何分隔的,但这在大多数情况下应该可以工作: ^[(.*?)]

    【讨论】:

      【解决方案5】:

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

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

      演示here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多