Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从字符串中解释数字列表?_Python_Regex - Fatal编程技术网

Python 如何从字符串中解释数字列表?

Python 如何从字符串中解释数字列表?,python,regex,Python,Regex,我有如下数值: a="1-5" b="1,3" c="1" d="1,3-5" e="1-3,5,7-8" f="0,2-5,7-8,10,14-18" 我想把它们变成完整的数字列表,如下所示: a="1,2,3,4,5" b="1,3" c="1" d="1,3,4,5" e="1,2,3,5,7,8" f="0,2,3,4,5,7,8,10,14,15,16,17,18" 使用re模块,我可以获得以下数字: 像a中的15 但我无法得到完整的数字范围 例如12345ina 我如何才能做到这

我有如下数值:

a="1-5"
b="1,3"
c="1"
d="1,3-5"
e="1-3,5,7-8"
f="0,2-5,7-8,10,14-18"
我想把它们变成完整的数字列表,如下所示:

a="1,2,3,4,5"
b="1,3"
c="1"
d="1,3,4,5"
e="1,2,3,5,7,8"
f="0,2,3,4,5,7,8,10,14,15,16,17,18"
使用
re
模块,我可以获得以下数字:

a中的
15

但我无法得到完整的数字范围

例如
12345
in
a


我如何才能做到这一点?

我认为这里没有必要使用正则表达式:

def expand_ranges(string):
    def expand(start, stop):
        return ','.join(map(str, range(int(start), int(stop) + 1)))
    return ','.join([expand(*d.split('-')) if '-' in d else d for d in string.split(',')])
这个

  • 以逗号分隔输入字符串
  • 如果字符串中有破折号,则在该破折号上拆分,并扩展范围以包括中间的数字
  • 用逗号将结果连接回来
  • 使用每个测试用例进行演示:

    >>> expand_ranges("1-5")
    '1,2,3,4,5'
    >>> expand_ranges("1,3")
    '1,3'
    >>> expand_ranges("1")
    '1'
    >>> expand_ranges("1,3-5")
    '1,3,4,5'
    >>> expand_ranges("1-3,5,7-8")
    '1,2,3,5,7,8'
    >>> expand_ranges("0,2-5,7-8,10,14-18")
    '0,2,3,4,5,7,8,10,14,15,16,17,18'
    

    我认为这里不需要使用正则表达式:

    def expand_ranges(string):
        def expand(start, stop):
            return ','.join(map(str, range(int(start), int(stop) + 1)))
        return ','.join([expand(*d.split('-')) if '-' in d else d for d in string.split(',')])
    
    这个

  • 以逗号分隔输入字符串
  • 如果字符串中有破折号,则在该破折号上拆分,并扩展范围以包括中间的数字
  • 用逗号将结果连接回来
  • 使用每个测试用例进行演示:

    >>> expand_ranges("1-5")
    '1,2,3,4,5'
    >>> expand_ranges("1,3")
    '1,3'
    >>> expand_ranges("1")
    '1'
    >>> expand_ranges("1,3-5")
    '1,3,4,5'
    >>> expand_ranges("1-3,5,7-8")
    '1,2,3,5,7,8'
    >>> expand_ranges("0,2-5,7-8,10,14-18")
    '0,2,3,4,5,7,8,10,14,15,16,17,18'
    

    必须以特殊的方式处理范围(1“-”5)。为此,请尝试内置“”的蟒蛇


    祝您好运。

    您必须以特殊方式处理范围(1“-”5)。为此,请尝试内置“”的蟒蛇


    祝您在本练习中好运。

    如果设置了正则表达式,则可以将自定义函数作为
    repl
    参数传递给:


    如果设置了正则表达式,则可以将自定义函数作为
    repl
    参数传递给:


    re.sub(r'(\d+)-(\d+),lambda m:','.join(str(i)表示范围内的i(int(m.group(1)),int(m.group(2))+1)),f)
    @AvinashRaj足够正确,但我真的看不到使用
    lambda
    @AvinashRaj的好处吗?它有100多个字符,使用
    lambda
    意味着您无法轻松地重用该函数或单独测试它。
    re.sub(r'(\d+)-(\d+)、lambda m:'、join(str(i)表示范围内的i(int(m.group(1))、int(m.group(2))、lambda)
    @AvinashRaj确实如此,但我真的看不到使用
    da
    @AvinashRaj的好处吗?它有100多个字符,使用
    lambda
    意味着您无法轻松重用该函数或单独测试它。