【问题标题】:Regex split on parentheses getting double results正则表达式拆分括号得到双重结果
【发布时间】:2014-05-29 20:19:22
【问题描述】:

我正在使用像“4 + 5 + (7 - 9) + 8”这样的字符串并尝试在括号上拆分以获得包含 4 + 5、(7-9)、+ 8 的列表。所以我使用下面的正则表达式字符串。但它给了我 4 + 5, (7-9), 7-9 , + 8。希望它只是一些简单的事情。谢谢。

 List<string> test = Regex.Split("4 + 5 + ( 7 - 9 ) + 8", @"(\(([^)]+)\))").ToList();

【问题讨论】:

  • + 后面的4 + 5 怎么样?
  • 如果您尝试通过解析来评估表达式,您可能需要查看Shunting-yard algorithm
  • 哦,是的,第一组的加号。谢谢你们只是额外的括号。那篇文章很有趣,可能是完成这项任务的更好方法。

标签: c# regex


【解决方案1】:

删除正则表达式中多余的括号:

(\(([^)]+)\)) // your regex
(           ) // outer parens
 \(       \)  // literal parens match
   (     )    // extra parens you don't need
    [^)]+     // one or more 'not right parens'

额外的括号会为“inside the literal parens”创建一个匹配项,即您看到的额外的 7 - 9

所以你应该有:

@"(\([^)]+\))"

【讨论】:

  • 感谢您的解释也帮助我获得了更多的理解。当它让我在几分钟内接受答案时。
【解决方案2】:
List<string> test = Regex.Split("4 + 5 + ( 7 - 9 ) + 8", @"(\([^)]+\))").ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2015-11-25
    • 1970-01-01
    • 2016-02-14
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多