我们说我有一个这样的字符串:
s = '((Xyz_lk) some stuff (XYZ_l)) (and even more stuff (XyZ))'
我想在单个单词周围删除括号,以便获得:
'(Xyz_lk some stuff XYZ_l) (and even more stuff XyZ)'
我将如何在Python中执行此操作?到目前为止,我只是设法使用
将它们与文本一起删除re.sub('\(\w+\)', '', s)
给出了
'( some stuff ) (and even more stuff )'
我怎样才能删除括号并将文本保留在其中?
答案 0 :(得分:5)
您可以使用反向引用(实际上在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)'
>>>
有关详细信息,请阅读以下有关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标记中的正斜杠。