Python正则表达式删除所有方括号及其内容

Posted

技术标签:

【中文标题】Python正则表达式删除所有方括号及其内容【英文标题】:Python regular expression to remove all square brackets and their contents 【发布时间】:2017-02-19 06:45:48 【问题描述】:

我正在尝试使用此正则表达式从字符串中删除方括号的所有实例(以及其中的所有内容)。例如,这在字符串中只有一对方括号时有效:

import re
pattern = r'\[[^()]*\]'
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens."""
t = re.sub(pattern, '', s)
print t

我得到的是正确的:

>>>Issachar is a rawboned donkey lying down among the sheep pens.

但是,如果我的字符串包含一组以上的方括号,它就不起作用。例如:

s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]"""

我明白了:

>>>Issachar is a rawboned

无论字符串中有多少个方括号,我都需要正则表达式才能工作。正确答案应该是:

>>>Issachar is a rawboned donkey lying down among the sheep pens.

我研究并尝试了许多排列都无济于事。

【问题讨论】:

请注意,虽然正则表达式可以帮助您串联匹配括号(如 a[b]c[d]e),但它们通常无法处理所谓的nested parens problem。 (例如:a[b[c][d[e]]]。)不过,您可以通过专门编码一些最大嵌套数来“伪造”它。 【参考方案1】:

默认情况下*(或+)会贪婪匹配,因此问题中给出的模式将匹配到最后一个]

>>> re.findall(r'\[[^()]*\]', "Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]")
['[a] donkey lying down among the sheep pens.[b]']

通过在重复运算符(*)后附加?,可以使其匹配非贪婪方式。

>>> import re
>>> pattern = r'\[.*?\]'
>>> s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]"""
>>> re.sub(pattern, '', s)
'Issachar is a rawboned donkey lying down among the sheep pens.'

【讨论】:

括号内的数字呢?例如,text =“这是关于数字[30]。你的地址在哪里?[90]”。就像在***文本文档中一样。 好的,我知道了 >> "[\d*]" @NeihPaine330\[\d+\].【参考方案2】:

试试:

import re
pattern = r'\[[^\]]*\]'
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]"""
t = re.sub(pattern, '', s)
print t

输出:

Issachar is a rawboned donkey lying down among the sheep pens.

【讨论】:

【参考方案3】:

对于括号内的数字(无字母),例如[89]、[23]、[11] 等, 这是要使用的模式。

import re

text = "The[TEXT] rain in[33] Spain[TEXT] falls[12] mainly in[23] the plain![45]"
pattern = "\[\d*?\]"
numBrackets = re.findall(pattern, text)

print(numBrackets)

输出:

['[33]', '[12]', '[23]', '[45]']

【讨论】:

以上是关于Python正则表达式删除所有方括号及其内容的主要内容,如果未能解决你的问题,请参考以下文章

括号之间的Python正则表达式替换[重复]

怎么通过正则表达删除含中文的括号部分但保留含英文的括号部分?

正则表达式根据其中的值获取特定匹配括号后的所有内容

如何在 Python 中使用正则表达式删除右方括号?

notepad++正则表达式删除大括号之间的所有文本

用于删除 XML 标记及其内容的正则表达式