Python 如何使用正则表达式替换没有嵌套括号的字符串中不匹配的括号?
我有一根这样的绳子Python 如何使用正则表达式替换没有嵌套括号的字符串中不匹配的括号?,python,regex,Python,Regex,我有一根这样的绳子 text = 'AWS certification ( AWS Solutions Architect' text1 = 'AWS certification ( AWS Solutions Architect )' 如何替换(text变量中的,但在text1中忽略它,因为在text1中我们有两个括号 我尝试了一个基本的re.sub(“\(”,“-”,text),但这正在替换()中的text和text1,这不是我想要的 非常感谢您的帮助。如果您没有任何其他情况,请仅在开始
text = 'AWS certification ( AWS Solutions Architect'
text1 = 'AWS certification ( AWS Solutions Architect )'
如何替换(text
变量中的,但在text1
中忽略它,因为在text1
中我们有两个括号
我尝试了一个基本的re.sub(“\(”,“-”,text)
,但这正在替换(
)中的text和text1,这不是我想要的
非常感谢您的帮助。如果您没有任何其他情况,请仅在开始和结束括号的计数不相同时更换
>>> if text.count('(') != text.count(')'):
... re.sub('\(', '-', text)
...
'AWS certification - AWS Solutions Architect'
你可以用
text = re.sub(r'(\([^()]*\))|[()]', lambda x: x.group(1) or "-", text)
见:
重新导入
text=[“AWS认证(AWS解决方案架构师)”、“AWS认证(AWS解决方案架构师)”]
对于文本中的文本:
打印(re.sub(r'(\([^()]*\)|[()]',lambda x:x.group(1)或“-”,文本))
#=>AWS认证-AWS解决方案架构师
#AWS认证(AWS解决方案架构师)
在这里,(\([^()]*\)|[()]
查找括号之间没有内括号的任何字符串并将其捕获到组1中,然后[()]
匹配(
或)
在任何其他上下文中。然后,如果组1不匹配,则替换为-
,否则,将返回组1值。是否可以在输入中嵌套(
和)
?如果括号之后不能出现,则可以使用正向前瞻\(?=[^()\r\n]*$)
或反向前瞻\((?![^()\r\n]*\)
这可能有两种解决方案,具体取决于括号的数量和实际要求。如果需要删除所有不匹配的括号(不支持嵌套括号),请使用re.sub(r'(\([^()]*\)|[()]),lambda x:x.group(1)或“-”,text)
,请参阅。@WiktorStribiżew谢谢,这很有效