Python 在字符串中查找小的子字符串
我试图用Python 在字符串中查找小的子字符串,python,regex,Python,Regex,我试图用re(括号内容)解析一些数学表达式 我试过这个: >>> re.compile("\(.*\)").findall("(1 + 2) + (3 + 4)") ['(1 + 2) + (3 + 4)'] 但我发现只有最大的一个事件,包括最后一个括号和第一个括号之间的内容。但我只想要最小的 我怎样才能做到这一点 >>> re.compile(<expr>).findall("(1 + 2) + (3 + 4)") ['(1 + 2)', '(
re
(括号内容)解析一些数学表达式
我试过这个:
>>> re.compile("\(.*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2) + (3 + 4)']
但我发现只有最大的一个事件,包括最后一个括号和第一个括号之间的内容。但我只想要最小的
我怎样才能做到这一点
>>> re.compile(<expr>).findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4')]
>re.compile().findall(“(1+2)+(3+4)”)
['(1 + 2)', '(3 + 4')]
我尝试将
替换为“\(?![\(\))+\)”(用括号内的括号排除出现的情况),但似乎不起作用。与其将所有内容与匹配*
,不如从匹配的右括号中排除以下字符:
>>> re.compile("\([^)]*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4)']
看我在用什么
[^)]*
而不是
.*
不要将所有内容都与
*
匹配,而是将右括号字符从匹配项中排除:
>>> re.compile("\([^)]*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4)']
看我在用什么
[^)]*
而不是
.*
让它变得懒惰:\(.*?)和/或将
*
更改为[^)]*
-\([^)]*\)
@rock321987您的建议有效,但是*?
和*
之间有什么区别?(不是?
意味着“0或1次出现”?)*?
是懒惰的。它尝试尽可能少地匹配,直到满足条件。*
是贪婪的。它尝试尽可能多地匹配。打开您的输入和正则表达式,然后单击左侧的正则表达式调试器。您将理解它。使它懒惰:-\(*?)
和/或将*
更改为[^]*
-\([^]*\)
@rock321987您的建议有效,但是*?
和*
之间有什么区别?(不是?
意味着“0或1次出现”?)*?
是懒惰的。它尝试尽可能少地匹配,直到满足条件。*
是贪婪的。它尝试尽可能多地匹配。打开输入和正则表达式,然后单击左侧的正则表达式调试器。您将理解它不适用于(1*(2+3)*4)
。最好使用\([^()]*\)
@tobias\u k嵌套似乎不在OP的问题范围内。@tobias\u k true。我假设,正如OP在示例中所做的那样,没有嵌套括号的简单操作。@ClasG谁知道呢?但您也可以将其设置为与嵌套参数一起使用。@tobias_k ClasG是对的:我不需要将其用于嵌套表达式(我应该提到它,我的错),但谢谢您的建议!不适用于“(1*(2+3)*4)”
。最好使用\([^()]*\)
@tobias\u k嵌套似乎不在OP的问题范围内。@tobias\u k true。我假设,正如OP在示例中所做的那样,没有嵌套括号的简单操作。@ClasG谁知道呢?但您也可以将其设置为与嵌套参数一起使用。@tobias_k ClasG是对的:我不需要将其用于嵌套表达式(我应该提到它,我的错),但谢谢您的建议!