--- esA.py- 2016-09-01 23:00:00.000000000 +0900 +++ esA.py 2016-09-02 00:00:00.000000000 +0900 @@ -9,7 +9,7 @@ def encode(s, tbl): def decode(s, tbl, add_spc=False): add = ' ' if add_spc else '' f = lambda t, (k, s1, d1, ec): t.replace( ec, add + d1 + add ) - return reduce(f, tbl, s) + return reduce(f, tbl, s).replace('@ ', '@') def fidx(s, lst): idxs = [ s.index(t) for t in lst if t in s ] @@ -72,19 +72,19 @@ def es_split(s): kf = lambda (k, s1, d1, ec): len(s1) tbl = sorted(tbl, key=kf, reverse=True) - print('tbl:\n{}\n'.format(tbl)) + #print('tbl:\n{}\n'.format(tbl)) s = encode(s, tbl) - print('encode:\n{}\n'.format(s)) + #print('encode:\n{}\n'.format(s)) lst = div_str_cut_comment(s, kdic, tbl) print('div_str:\n{}\n'.format(lst)) - f = lambda e: decode(e[1], tbl, add_spc=True).split() if e[0] is None else [ e[1] ] - f2 = lambda t, e: t + f(e) - lst = reduce(f2, lst, []) - - lst = [ s1.replace('@ ', '@') for s1 in lst ] + dec_split = lambda s: decode(s, tbl, add_spc=True).split() + get_k = lambda s1: next( ( k for (k, s1_, d1, ec) in tbl if s1_ == s1 ), None ) + try_split = lambda e, (k, v): [ [ get_k(s1), s1 ] for s1 in dec_split(v) ] if k is None else [ e ] + f = lambda t, e: t + try_split(e, e) + lst = reduce(f, lst, []) return lst