Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字符串中查找小的子字符串_Python_Regex - Fatal编程技术网

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是对的:我不需要将其用于嵌套表达式(我应该提到它,我的错),但谢谢您的建议!