我有像
这样的字符串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)
我是正则表达式的新手。有没有更好的方法呢?
答案 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']