Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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,我有一根这样的绳子 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谢谢,这很有效