使用正则表达式从以下字符串中提取数据

时间:2016-06-04 18:08:10

标签: python regex

我有像

这样的字符串
st = " *  ** abc * def ghi **abc* mn*"

我想在*之间提取一个包含唯一元素的列表,在这种情况下会是:

['abc', 'def ghi', 'mn']

我的方法:

se = set([x.strip() for x in re.split('\*+', st)])
se.discard('')
l = list(se)

我是正则表达式的新手。有没有更好的方法呢?

4 个答案:

答案 0 :(得分:2)

您可以在一个声明中完成:

se = list(set([x.strip() for x in re.split('\*+', st)]) - {''})

然而,为了便于阅读,这并不一定比你的解决方案更受欢迎。

答案 1 :(得分:1)

无需启动正则表达式引擎:

testcase = " *  ** abc * def ghi **abc* mn*"
list(set(s.strip() for s in testcase.split("*")) - {''})

答案 2 :(得分:0)

这个怎么样:

>>> st
' *  ** abc * def ghi **abc* mn*'
>>> l = []
>>> def f(x):
        x = x.strip()
        if x:
            return x


>>> for elem in st.split('*'):
        x = f(elem)
        if x and x not in l:
            l.append(x)


>>> l
['abc', 'def ghi', 'mn']

或者如果您更喜欢使用功能,那么:

 rails generate survey:install

答案 3 :(得分:-3)

获取您提供的数据并尝试以下代码。 既然你提到使用正则表达式,这听起来合理,我有这个建议。您可以改进此代码并发布最终版本。

import re

st = " *  ** abc * def ghi **abc* mn*"

mystrs = re.compile('\w+')
allstrs = re.findall(mystrs, st)
print allstrs

输出:

['abc','def','ghi','abc','mn']