希望有人可以阐明这个问题,因为它使我感到困惑。我有一个看起来像这样的字符串:

s = "abcdef [[xxxx xxx|ghijk]] lmnop [[qrs]] tuv [[xx xxxx|wxyz]] 0123456789"


我想要这个结果:

abcdef ghijk lmnop qrs tuv wxyz 0123456789


在这里回顾了许多问题和答案之后,我得出的最接近的解决方案是:

s = "abcdef [[xxxx xxx|ghijk]] lmnop [[qrs]] tuv [[xx xxxx|wxyz]] 0123456789"
s = re.sub('\[\[.*?\|', '', s)
s = re.sub('[\]\]]', '', s)
--> abcdef ghijk lmnop wxyz 0123456789


由于并非双括号中的每个子字符串都包含管道,因此re.sub会删除“ [[”至下一个“ |”中的所有内容而不是检查每组双括号内的内容。

任何帮助将不胜感激。

最佳答案

>>> import re
>>> s = "abcdef [[xxxx xxx|ghijk]] lmnop [[qrs]] tuv [[xx xxxx|wxyz]] 0123456789"
>>> re.sub(r'(\[\[[^]]+?\|)|([\[\]])', '', s)
'abcdef ghijk lmnop qrs tuv wxyz 0123456789'


这将搜索并删除以下两项:


两个开括号后面是一堆不是闭括号的东西,后面是管道。
打开或关闭括号。

10-07 16:40