python实现批量生成字符串思路

发布于 2022-09-01 12:33:10 字数 300 浏览 11 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笑百媚生 2022-09-08 12:33:10

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

#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'web'

import ply.lex as lex
import ply.yacc as yacc

# 词法分析
tokens = ('WORD', 'NUMBER')

# Regular expression rules for  tokens
t_NUMBER = r'\d+'
t_ignore = ' \t'

def t_WORD(t):
    r"""[a-z_]+"""
    return t


def 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.type


parser = yacc.yacc()

if __name__ == '__main__':
    # 测试数据
    data = 'abc[1-3]'
    data2 = 'abc[a-d]'
    parser.parse(data)
    print('-------')
    parser.parse(data2)

下面是结果 :)

abc1
abc2
abc3
--------
abca
abcb
abcc
abcd
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文