删除括号内的内容的正则表达式是什么?

时间:2013-11-18 05:03:23

标签: python regex

我想做这样的事情,

Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5

Alice in the Wonderland Rating 4.5/5

实现此目的的正则表达式命令是什么?

4 个答案:

答案 0 :(得分:4)

您想要转义括号并将非贪婪修饰符?与catch-all表达式.+一起使用。

>>> s = 'Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5'
>>> re.sub(r'\[.+?\]\s*', '', s)
'Alice in the Wonderland Rating 4.5/5'

说明:

  • .表示任何字符,+表示一次或多次。这个表达式是“贪婪的”并且将匹配所有内容(字符串的其余部分,包括任何结束括号),因此您需要非贪婪修饰符?使其在结束括号处停止。请注意,x?表示零或一次出现“x”,因此上下文很重要。
  • 如果您要抓住“[]”,请将其更改为.**表示零次或多次出现
  • \s代表任何空格字符

您可以使用“已取消”字符类而不是.+? - [^x]表示not "x",但生成的表达式更难以阅读:\[[^\]]+\]

Justhalf的观察是非常恰当的:只要括号不嵌套,这个就可以了。

答案 1 :(得分:3)

正则表达式不适合匹配任意数量的开括号和右括号,但如果它们没有嵌套,则可以使用此正则表达式完成:

import re
string = 'Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5'
re.sub('\[[^\]]+\]\s*','',string)

请注意,它也会删除方括号后的任何空格。

答案 2 :(得分:2)

您可以使用re.sub

>>> re.sub(r'\[[^]]*\]\s?' , '', 'Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5')
'Alice in the Wonderland Rating 4.5/5'
>>>

答案 3 :(得分:2)

如果您在正则表达式中更喜欢[]:)

>>> import re
>>> s = 'Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5'
>>> re.sub('[[].*?[]]\s*', '', s)
'Alice in the Wonderland Rating 4.5/5'

>>> re.sub('[[][^]]*.\s*', '', s)
'Alice in the Wonderland Rating 4.5/5'

重申@justhalf所说的话。 Python正则表达式对嵌套[

没有好处