我正在为那个努力。我想捕获不仅仅包含digit %
的括号的内容。这意味着我想捕获此(essiccato, ricco di flavonoidi)
或(ricco di 23% pollo, in parte essiccato, in parte idrolizzato)
,但不捕获此(23 %)
或(23)
或(23 %)
以下是一个示例:https://regex101.com/r/yW4aZ3/896
到目前为止,我在那里:\([^()][^()]*\)
答案 0 :(得分:1)
您可以使用
r'\((?!\s*\d+(?:[.,]\d+)?\s*)[^()]+\)'
详细信息
\(
-一个(
字符(?!\s*\d+(?:[.,]\d+)?\s*)
-否定的超前匹配,匹配的位置不是紧随其后的
\s*
-超过0个空格\d+
-1个以上数字(?:[.,]\d+)?
-可选出现.
或,
和1个以上数字\s*
-超过0个空格[^()]+
-除(
和)
以外的1个以上的字符\)
-一个)
字符。答案 1 :(得分:0)
假设(...)
全部平衡并且里面没有转义括号,则可以将此正则表达式与一个字符类和两个否定字符类一起使用:
\([\d%]*[^%\d()][^()]*\)
RegEx详细信息
\(
:比赛开始(
[\d%]*
:匹配0个或多个任何数字或%
[^%\d()]
:匹配不是(
,)
,%
和一个数字的字符
[^()]*
:匹配0个或多个非(
而不是)
的字符\)
:比赛闭幕)
答案 2 :(得分:0)
您可以使用负数前瞻,在左括号不是数字后跟一个可选的百分号之后,将出现以下情况:
\((?!\s*\d+\s*%?\s*\))[^)]+\)
说明
\(
匹配(
(?!
负向前进,断言右边的不是
\s*\d+\s*%?\s*\)
匹配1个以上的数字,后跟一个可选的%
,直到)
)
提前关闭[^)]+\)
匹配除)
以外的任意字符1倍以上,然后匹配)