【问题标题】:regex match space not in parenthesis, accolades or squared barackets正则表达式匹配空间不在括号、荣誉或方括号中
【发布时间】:2013-09-17 23:12:25
【问题描述】:

我正在尝试按空格/空格分割句子,但我必须排除括号内的空格()、赞誉{} 或方括号[]

ex 字符串:[apples carrots] (car plane train) {food water} foo bar 应生成一个包含:

的数组
  • [苹果胡萝卜]
  • (汽车飞机火车)
  • {食用水}
  • 酒吧

有什么想法吗?

【问题讨论】:

标签: regex


【解决方案1】:

不是分割,而是匹配和修剪。示例是 JavaScript,您可以在浏览器控制台中试用:

var a = '[apples carrots] (car plane train) {food water} foo bar';
a.match(/[a-zA-Z0-9\[\]\(\){}]+/g).map(function (s) { return s.replace(/[\[\]\(\)\{\}]/, ''); });
["apples", "carrots", "car", "plane", "train", "food", "water", "foo", "bar"]

或者:

a.split(/\s+(?![^\[]*\]|[^(]*\)|[^\{]*})/)

生产:

["[apples carrots]", "(car plane train)", "{food water}", "foo", "bar"]

【讨论】:

    【解决方案2】:

    在空白处拆分,然后进行正向前瞻,检查下一个括号字符(如果有)是否为开放字符(或输入结尾):

    \s+(?=[^\])}]*([\[({]|$))
    

    【讨论】:

    • 您可能缺少右括号。 \s+( <-- Unbalanced '(' ?=[^\])}]*([\[({]|$)
    • @sln 确实如此。固定的。谢谢。 (我是在 iPhone 上输入的 - 很难找到这样的东西)
    • @Bohemian,这对我不起作用:它缺少一些不在括号中的空格
    • @francoisromain 您的具体输入是什么,您对这场比赛有什么期望?
    • @Natt 我认为this answer 会做你想做的事,如果修改它使用方括号
    【解决方案3】:

    要匹配 ()、{} 和 [] 外面的空格,请使用此模式 (\s)(?:(?=(?:(?![\]\)}]).)*[\[\({])|(?!.*[\]\)}])) Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2011-07-18
      • 2015-06-23
      • 1970-01-01
      • 2023-04-02
      • 2018-04-06
      相关资源
      最近更新 更多