Python实现批量生成字符串最佳思路是什么,python思路,比如我现在有abc1,a


比如我现在有abc1,abc2,abc3..这样一直到abc100
我想有这样一个脚本可以直接
python parse.py "abc[1-100]"
这样生成,,支持[a-z]这样,同时还支持{1,2,4}这样枚举的写法

之前的思路是利用split()这样来过滤掉{}或者[]来进行解析
代码非常丑,而且效果不太好
后来有学长之前说可以用re.sub来做,还没尝试

不知道大家有没有更好玩的想法~~求指点

简单实现了一下 [] 的方式, {}的实现方法楼主可以参照这个实现 :)
需要 ply 模块

#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'web'import ply.lex as leximport ply.yacc as yacc# 词法分析tokens = ('WORD', 'NUMBER')# Regular expression rules for  tokenst_NUMBER = r'\d+'t_ignore = ' \t'def t_WORD(t):    r"""[a-z_]+"""    return tdef t_error(t):    print "Illegal character '%s'" % t.value[0]    t.lexer.skip(1)literals = ['[', ']', '-']lexer = lex.lex()# 语法分析def p_stmt_bracket(p):    """stmt_bracket : WORD '[' stmt_bracket_inside ']'"""    p[0] = p[1]    for i in p[3]:        print(p[0]+i)def p_stmt_bracket_inside(p):    """stmt_bracket_inside : WORD '-' WORD                           | NUMBER '-' NUMBER"""    if p[1].isdigit():        p[0] = [str(x) for x in range(int(p[1]), int(p[3]) + 1)]    if p[1].isalpha():        p[0] = [chr(i) for i in range(ord(p[1]), ord(p[3]) + 1)]def p_error(p):    print 'parse error, unexpected token:', p.typeparser = yacc.yacc()if __name__ == '__main__':    # 测试数据    data = 'abc[1-3]'    data2 = 'abc[a-d]'    parser.parse(data)    print('-------')    parser.parse(data2)

下面是结果 :)

abc1abc2abc3--------abcaabcbabccabcd

编橙之家文章,

评论关闭