-1

我最初的问题是我需要剥离一个字符串,然后由操作员拆分。

s = " a & b | c & d "
l = map(lambda x : map(lambda x:x.strip() , x.strip().split('&')), s.strip().split('|'))

这对于人们阅读来说太麻烦了,所以我正在考虑使用装饰器来做这个 strip() 预处理。

这是我目前的解决方案,但它不起作用!

更新:

query_AND =lambda wl:  '.*'+'.*'.join(wl)+'.*'

def d_query_AND(query_split):
    def d_query_AND_f(query_split):
        return query_AND(query_split)
        #return query_spli
    return d_query_AND_f


@d_query_AND
def query_split(p):
    return [v for v in p.split('&')]


print query_split("asd & asdsa & sadsa")
4

1 回答 1

0

我不得不承认我不完全理解你为什么需要一个装饰器。

标记这些表达式的一种相对简单的方法是使用正则表达式:

In [12]: re.findall(r'[^|&\s]+|&|[|]', ' a & b | c & d ')
Out[12]: ['a', '&', 'b', '|', 'c', '&', 'd']

In [13]: re.findall(r'[^|&\s]+|&|[|]', 'asdasd&sdasd| asdsa & asdsda')
Out[13]: ['asdasd', '&', 'sdasd', '|', 'asdsa', '&', 'asdsda']

正则表达式由三个组件 OR-ed 组成:

  • [^|&\s]+&匹配除,|和空格之外的一系列字符。
  • &匹配&
  • [|]匹配|

如果您不需要捕获运算符,则可以将正则表达式简化为r'[^|&\s]+'.

编辑:如果您不想分割空格,正如您在评论中暗示的那样,以下应该有效:

In [18]: map(string.strip, re.findall(r'[^|&]+|&|[|]', 'asdasd&sd  asd| asdsa & asdsda'))
Out[18]: ['asdasd', '&', 'sd  asd', '|', 'asdsa', '&', 'asdsda']
于 2012-12-04T08:20:46.703 回答