Python 删除括号替换第一个匹配项

Python 删除括号替换第一个匹配项,python,Python,例如: string = '(hello) advanced technologies (2015)' 我想删除(hello),但保留(2015)。 我在网上搜索得到: newstring = re.sub(r'\((?:[^)(]|\([^)(]*\))*\)',"",string) 但它删除了两个括号: advanced technologies 如何更改re语句以仅删除第一个括号?如果确实只想删除第一个匹配项,可以将count参数传递给sub: re.sub(r'\((?:[

例如:

string = '(hello) advanced technologies (2015)'
我想删除(hello),但保留(2015)。 我在网上搜索得到:

 newstring =  re.sub(r'\((?:[^)(]|\([^)(]*\))*\)',"",string)
但它删除了两个括号:

  advanced technologies

如何更改re语句以仅删除第一个括号?

如果确实只想删除第一个匹配项,可以将
count
参数传递给
sub

re.sub(r'\((?:[^)(]|\([^)(]*\))*\)', '', string, count=1)
结果:

' advanced technologies (2015)'

如果您真的想要更奇特的东西,比如在括号中保留所有年份,请在问题中注明。

如果您真的只想删除第一个匹配项,您可以将
count
参数传递给
sub

re.sub(r'\((?:[^)(]|\([^)(]*\))*\)', '', string, count=1)
结果:

' advanced technologies (2015)'
如果你真的想要更奇特的东西,比如在括号中保留所有年份,请在问题中注明。

re.sub()
有一个计数参数来匹配字母数字用法
\w

import re
string = '(hello) advanced technologies (2015)'
newstring =  re.sub(r'\(\w+\)', "", string, 1)
print(newstring)
# advanced technologies (2015)
re.sub()

import re
string = '(hello) advanced technologies (2015)'
newstring =  re.sub(r'\(\w+\)', "", string, 1)
print(newstring)
# advanced technologies (2015)

除了
count=1
answers(都很好)之外,如果您知道第一组始终位于字符串的开头,您还可以选择第一组:

assert re.sub(r'^\([^)]*\)', '', '(a)(b)') == '(b)'

如果几乎在开头,则可能出现类似的情况,例如允许空白。

除了回答(都很好)之外,如果您知道第一组始终位于字符串的开头,则可以选择第一组:

assert re.sub(r'^\([^)]*\)', '', '(a)(b)') == '(b)'
如果它几乎是在开头,则可能出现类似的情况,例如允许空白。

顺便说一句,“贪婪”在模式匹配中有特定的含义,它将匹配从第一个左括号到最后一个右括号的所有内容。在您的情况下,“只替换第一个匹配项”可能更合适。顺便说一句,“贪婪”在模式匹配中有特定的含义,它将匹配从第一个左括号到最后一个右括号的所有内容。在您的情况下,“仅替换第一个匹配项”可能更合适。