【问题标题】:Regex: match only outside parenthesis (so that the text isn't split within parenthesis)?正则表达式:仅匹配括号外(以便文本不会在括号内拆分)?
【发布时间】:2016-09-19 12:41:37
【问题描述】:

我有一个如下所示的目标字符串:

"foo (foo, foofoo), bar (foobar), foo, bar (barbar, foo), bar, foo"

我想要:

["foo (foo, foofoo)", "bar (foobar)", "foo", "bar (barbar, foo)", "bar", "foo"]

通过在", " 处拆分目标仅在括号外。匹配括号外逗号的正则表达式是什么?就我而言,嵌套括号不会出现,我不必考虑它们。

我个人使用 Python,但任何语言示例都可以。

【问题讨论】:

  • 一般来说,没有正则表达式可以处理这个问题,因为括号可以嵌套到任意深度。我认为您可能需要使用解析器来处理一般问题。

标签: python regex


【解决方案1】:
,(?![^(]*\))

您可以使用它来拆分。参见演示。这适用于您所说的没有嵌套的()

https://regex101.com/r/wV5bD0/1

【讨论】:

  • 谢谢你,天才。我花了很长时间才明白哈哈。
  • 完美,我在其他不适用于 Swift 的线程上找到了许多其他答案。这是适用于 Swift Regex 的第一个答案 :)
  • 这就像@vks 的魅力。我需要匹配不在括号内的字符串中的文本,例如“匹配的 str [不匹配]​​”并使用您的答案的变体 \w+(?![^\[]*\])
  • 谢谢!我一直在寻找 2 天的解决方案,因为我真的是正则表达式的菜鸟。你拯救了我的一天!
【解决方案2】:

您可以使用它来提取匹配项。假设没有嵌套()

(\w+(?: \([^\)]*\))?)

https://www.regex101.com/r/gR6jF1/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-02-13
    • 2021-07-01
    相关资源
    最近更新 更多