我想做这样的事情,
Alice in the Wonderland [1865] [Charles Lutwidge Dodgson] Rating 4.5/5
到
Alice in the Wonderland Rating 4.5/5
实现此目的的正则表达式命令是什么?
答案 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正则表达式对嵌套[