不包含数字+%的匹配括号

时间:2019-08-05 05:43:26

标签: regex python-3.x

我正在为那个努力。我想捕获不仅仅包含digit %的括号的内容。这意味着我想捕获此(essiccato, ricco di flavonoidi)(ricco di 23% pollo, in parte essiccato, in parte idrolizzato),但不捕获此(23 %)(23)(23 %)

以下是一个示例:https://regex101.com/r/yW4aZ3/896

到目前为止,我在那里:\([^()][^()]*\)

3 个答案:

答案 0 :(得分:1)

您可以使用

r'\((?!\s*\d+(?:[.,]\d+)?\s*)[^()]+\)'

请参见regex demoregex graph

enter image description here

详细信息

  • \(-一个(字符
  • (?!\s*\d+(?:[.,]\d+)?\s*)-否定的超前匹配,匹配的位置不是紧随其后的
    • \s*-超过0个空格
    • \d+-1个以上数字
    • (?:[.,]\d+)?-可选出现.,和1个以上数字
    • \s*-超过0个空格
  • [^()]+-除()以外的1个以上的字符
  • \)-一个)字符。

答案 1 :(得分:0)

假设(...)全部平衡并且里面没有转义括号,则可以将此正则表达式与一个字符类和两个否定字符类一起使用:

\([\d%]*[^%\d()][^()]*\)

Updated RegEx Demo

RegEx详细信息

  • \(:比赛开始(
  • [\d%]*:匹配0个或多个任何数字或%

  • 字符
  • [^%\d()]:匹配不是()%和一个数字的字符

  • [^()]*:匹配0个或多个非(而不是)的字符
  • \):比赛闭幕)

答案 2 :(得分:0)

您可以使用负数前瞻,在左括号不是数字后跟一个可选的百分号之后,将出现以下情况:

\((?!\s*\d+\s*%?\s*\))[^)]+\)

说明

  • \(匹配(
  • (?!负向前进,断言右边的不是
    • \s*\d+\s*%?\s*\)匹配1个以上的数字,后跟一个可选的%,直到)
  • )提前关闭
  • [^)]+\)匹配除)以外的任意字符1倍以上,然后匹配)

Regex demo