对于含糊不清的标题表示道歉,但我不知道如何用一句话来表达我的问题。
所以我有一些简单的正则表达式代码来在括号中提取代码。
^.*\((.*)\).*
使用以下代码在Python中成功运行。
m = re.search( "^.*\((.*)\).*" ,input)
if m:
print(m.groups()[0])
关闭括号)
可能位于最外面的括号内时,会出现问题。例如,我给出的当前代码
nsfnje (19(33)22) sfssf
作为输入将返回
19(33
但我希望它能够回归。
19(33)22
我不知道如何解决这个问题,所以任何帮助都会受到赞赏!
答案 0 :(得分:8)
>>> input = "nsfnje (19(33)22) sfssf"
>>> re.search( "\((.*)\)" ,input).group(1)
'19(33)22'
请注意,这会搜索最外面的括号,即使它们不平衡(例如"(1(2)))))"
)。使用单个标准正则表达式搜索平衡括号是不可能的。有关详细信息,请参阅this answer。
答案 1 :(得分:0)
您的代码未提供19(33
,而是33)22
。
问题在于,正则表达式开头的^.*
一直匹配字符串中的 last (
,而您实际上想要匹配< em>来自字符串中的第一个 (
。
如果你只想要最左边括号内的内容,那么在你的正则表达式的开头删除.*
,你也可以删除结尾.*
,因为它同样没有任何意义。
"\((.*)\)"
如果您想要整行/字符串的匹配以及括号内的内容,请通过添加*
?
匹配
"^.*?\((.*)\).*"
或更好,使用
"^[^(]*\((.*)\).*"