如何使用regex ... python从括号中删除字符串

时间:2016-02-02 22:39:58

标签: python regex python-2.7 python-2.x

我需要提取一个包含提取字段中单词的字符串:

[[cat]][[dog]][[mouse]][[apple]][[banana]][[pear]][[plum]][[pool]]

因此,我需要:cat dog mouse apple banana pear plum pool

我已经尝试了2个小时来为此做一个正则表达式。

我得到的最好的是(?<=[[]\S)(.*)(?=]]) 这让我:

cat]][[dog]][[mouse]][[apple]][[banana]][[pear]][[plum]][[pool

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

这是re.finditer的解决方案。让你的字符串为s。 这假设[[和]]之间可以存在任何内容。否则,@ noob的评论适用。

>>> [x.group(1) for x in re.finditer('\[\[(.*?)\]\]', s)]
['cat', 'dog', 'mouse', 'apple', 'banana', 'pear', 'plum', 'pool']

或者,使用外观和re.findall

>>> re.findall('(?<=\[\[).*?(?=\]\])', s)
['cat', 'dog', 'mouse', 'apple', 'banana', 'pear', 'plum', 'pool']

对于大型字符串,当我计算替代方案时,finditer版本似乎稍快一些。

In [5]: s=s*1000
In [6]: timeit [x.group(1) for x in re.finditer('\[\[(.*?)\]\]', s)]
100 loops, best of 3: 3.61 ms per loop
In [7]: timeit re.findall('(?<=\[\[).*?(?=\]\])', s)
100 loops, best of 3: 5.93 ms per loop

答案 1 :(得分:1)

简单re.split将起作用:

>>> s = '[[cat]][[dog]][[mouse]][[apple]][[banana]][[pear]][[plum]][[pool]]'
>>> import re
>>> print re.split(r'[\[\]]{2,4}', s)[1:-1]
['cat', 'dog', 'mouse', 'apple', 'banana', 'pear', 'plum', 'pool']

答案 2 :(得分:0)

你必须用正则表达式吗?

extract = "[[cat]][[dog]][[mouse]][[apple]][[banana]][[pear]][[plum]][[pool]]"
word_list = [word for word in extract.replace('[', '').split(']') if word != '']
print word_list

输出:

['cat', 'dog', 'mouse', 'apple', 'banana', 'pear', 'plum', 'pool']

现在用正则表达式获取。只需找到没有括号的非空字符串。

导入重新

target = "[[cat]][[dog]][[mouse]][[apple]][[banana]][[pear]][[plum]][[pool]]"
word_list = ' '.join(re.findall("[^\[\]]+", target))
print word_list

编辑返回单个字符串,而不是字符串列表。