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正则表达式删除所有方括号及其内容的主要内容,如果未能解决你的问题,请参考以下文章