假设我有一个这样的字符串:
s = '((Xyz_lk) some stuff (XYZ_l)) (and even more stuff (XyZ))'
Run Code Online (Sandbox Code Playgroud)
我想在单个单词周围删除括号,以便获得:
'(Xyz_lk some stuff XYZ_l) (and even more stuff XyZ)'
Run Code Online (Sandbox Code Playgroud)
我将如何在Python中执行此操作?到目前为止,我只是设法通过使用将文本与文本一起删除
re.sub('\(\w+\)', '', s)
Run Code Online (Sandbox Code Playgroud)
这使
'( some stuff ) (and even more stuff )'
Run Code Online (Sandbox Code Playgroud)
我怎样才能删除括号并将文本保留在其中?
您可以使用反向引用(实际上sub它们在函数中称为组引用号):
>>> s='((Xyz_lk) some stuff (XYZ_l)) (and even more stuff (XyZ))'
>>>
>>> re.sub(r'\((\w+)\)',r'\1',s)
'(Xyz_lk some stuff XYZ_l) (and even more stuff XyZ)'
>>>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读http://www.regular-expressions.info/backref.html中关于反向引用的以下说明:
反向引用与先前由捕获组匹配的文本匹配.假设您要匹配一对打开和关闭HTML标记,以及两者之间的文本.通过将开始标记放入反向引用中,我们可以为结束标记重用标记的名称.这是如何:
<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>.这个正则表达式只包含一对括号,它们捕获匹配的字符串[A-Z][A-Z0-9]*.这是开始的HTML标记.(由于HTML标记不区分大小写,因此此正则表达式需要不区分大小写的匹配.)反向引用\1(反斜杠1)引用第一个捕获组.\1匹配第一个捕获组匹配的完全相同的文本.在/之前,它是一个文字字符.它只是我们试图匹配的结束HTML标记中的正斜杠.