2024-05-23 18:10:40 发布
网友
很抱歉这个模棱两可的标题,但我不知道如何用一句话来表达我的问题。在
所以我有一些简单的正则表达式代码来提取括号之间的代码。在
^.*\((.*)\).*
这在Python中成功地使用了以下代码。在
当右括号)可能在最外面的括号内时,我的问题就出现了。例如,我当前的代码
)
nsfnje (19(33)22) sfssf
作为输入将返回
19(33
但我希望它能回来。在
19(33)22
我不知道如何解决这个问题,所以任何帮助将不胜感激!在
您的代码没有给出19(33,而是给出了33)22。在
33)22
问题是正则表达式开头的^.*一直匹配到字符串中的最后一个最后一个(,而实际上您希望从字符串中的第一个匹配。在
^.*
(
如果您只想要最外面的括号内的内容,那么删除正则表达式开头的.*,您也可以删除结尾.*,因为它同样没有任何作用。在
.*
"\((.*)\)"
如果您想要整行/字符串的匹配以及括号内的匹配,那么通过添加?使第一个*延迟匹配
?
*
或者更好,使用
"^[^(]*\((.*)\).*"
>>> input = "nsfnje (19(33)22) sfssf" >>> re.search( "\((.*)\)" ,input).group(1) '19(33)22'
注意,这将搜索最外层的括号,即使它们是不平衡的(例如"(1(2)))))")。不可能使用单个标准正则表达式搜索平衡括号。有关详细信息,请参见this answer。在
"(1(2)))))"
您的代码没有给出
19(33
,而是给出了33)22
。在问题是正则表达式开头的
^.*
一直匹配到字符串中的最后一个最后一个(
,而实际上您希望从字符串中的第一个匹配。在如果您只想要最外面的括号内的内容,那么删除正则表达式开头的
.*
,您也可以删除结尾.*
,因为它同样没有任何作用。在如果您想要整行/字符串的匹配以及括号内的匹配,那么通过添加
^{2}$?
使第一个*
延迟匹配或者更好,使用
注意,这将搜索最外层的括号,即使它们是不平衡的(例如
"(1(2)))))"
)。不可能使用单个标准正则表达式搜索平衡括号。有关详细信息,请参见this answer。在相关问题 更多 >
编程相关推荐