在Python中查找连续数字

在Python中查找连续数字,python,string,for-loop,numbers,Python,String,For Loop,Numbers,首先,我为我模糊的问题框架道歉,我只是不知道该怎么称呼这个问题。我也在谷歌搜索了很多次,试图找到解决方案,但我没有得出任何结论 我现在有一个完整的字符串,数字如下15-5.{123434}.15-18.。我想在字符串上迭代,一旦我遇到一个大括号,我想在遇到一个大括号之前,把后面所有的数字都记下来,然后把它们放在一个变量中。我想到了一种方法,像这样: string = '15-5.{123434}.15-18.' result = "" for index, letter in enumerat

首先,我为我模糊的问题框架道歉,我只是不知道该怎么称呼这个问题。我也在谷歌搜索了很多次,试图找到解决方案,但我没有得出任何结论

我现在有一个完整的字符串,数字如下
15-5.{123434}.15-18.
。我想在字符串上迭代,一旦我遇到一个大括号,我想在遇到一个大括号之前,把后面所有的数字都记下来,然后把它们放在一个变量中。我想到了一种方法,像这样:

string = '15-5.{123434}.15-18.'
result = ""

for index, letter in enumerate(string):  # For every letter with it's index,
    if letter == '{':  # If letter is '{',
        for number in string[index:]:  # Start a loop from that index,
            if number =='}':  # If number becomes '}',
                break
            result += number  #Else append the number in the result string.
然而,我想知道是否有更好的方法来做到这一点。我很感激所有的答案。谢谢大家!

System: Windows 10, 32bit Python version: 3.6.0 系统:Windows 10,32位 Python版本:3.6.0
这是我为数不多的几次推荐正则表达式之一:

In [27]: for i in re.findall("\{\d+\}", '15-5.{123434}.15-18.'): print(i[1:-1])
123434
当然,您可以自己编写一个函数来解析它:

def getNums(s):
    answer = []
    curr = []
    acc = False
    for char in s:
        if char == "{":
            acc = True
            continue
        if char == "}":
            acc = False
            answer.append(''.join(curr))
            acc = False
            continue
        if acc:
            curr.append(char)

这是我为数不多的几次推荐正则表达式之一:

In [27]: for i in re.findall("\{\d+\}", '15-5.{123434}.15-18.'): print(i[1:-1])
123434
当然,您可以自己编写一个函数来解析它:

def getNums(s):
    answer = []
    curr = []
    acc = False
    for char in s:
        if char == "{":
            acc = True
            continue
        if char == "}":
            acc = False
            answer.append(''.join(curr))
            acc = False
            continue
        if acc:
            curr.append(char)

没有敲正则表达式,但我想我找到了另一个带有.split()的行

测试:

ss = ['','{}','{0}','1','{0}1','1{0}','{0}{2}','{0}1{2}','{0}1{2}3']                      

for s in ss:                       
    print(s,[e.split('}')[0] for e in s.split('{') if '}' in e])
 []
{} ['']
{0} ['0']
1 []
{0}1 ['0']
1{0} ['0']
{0}{2} ['0', '2']
{0}1{2} ['0', '2']
{0}1{2}3 ['0', '2']
编辑以扩展列表中的理解

关于列表理解的大量信息,非常基本,足以理解我的答案的列表理解

我们可以在理解部分之间用换行符重写理解,这可能有助于阅读:

c = [e.split('}')[0]
            for e in s.split('{')
                if '}' in e]
我们可以在等效的for循环中完成整个过程:

def in_curly(s):    
    new_list = []
    for e in s.split('{'):
        if '}' in e:
            new_list.append(e.split('}')[0])
    return new_list

c = in_curly(s)
说:

s ='35{0}17{2}3'

在实时执行可视化模式下,以上任一项或两项都可以逐步完成,但我想我找到了另一个带有.split()的命令行

测试:

ss = ['','{}','{0}','1','{0}1','1{0}','{0}{2}','{0}1{2}','{0}1{2}3']                      

for s in ss:                       
    print(s,[e.split('}')[0] for e in s.split('{') if '}' in e])
 []
{} ['']
{0} ['0']
1 []
{0}1 ['0']
1{0} ['0']
{0}{2} ['0', '2']
{0}1{2} ['0', '2']
{0}1{2}3 ['0', '2']
编辑以扩展列表中的理解

关于列表理解的大量信息,非常基本,足以理解我的答案的列表理解

我们可以在理解部分之间用换行符重写理解,这可能有助于阅读:

c = [e.split('}')[0]
            for e in s.split('{')
                if '}' in e]
我们可以在等效的for循环中完成整个过程:

def in_curly(s):    
    new_list = []
    for e in s.split('{'):
        if '}' in e:
            new_list.append(e.split('}')[0])
    return new_list

c = in_curly(s)
说:

s ='35{0}17{2}3'


在实时执行可视化模式下,以上任一项或两项都可以逐步完成

使用正则表达式?您熟悉正则表达式吗?它们使这成为一个微不足道的问题。我曾考虑过使用正则表达式,但我不太了解它们,也不知道是否应该使用re.search()、re.match()或任何其他合适的选项。同一行中是否有多组花括号?使用re.finditer()或re.findall().使用正则表达式?你对正则表达式熟悉吗?他们使这成为一个小问题。我曾考虑使用正则表达式,但我不太了解它们,我不知道是否应该使用,re.search(),re.match()或任何其他合适的选项。同一行中是否可以有多组花括号?使用re.finditer()或re.findall()。噢!我以为我可以用正则表达式解决它,但不知道该用哪一个,非常感谢!但是我不明白你为什么在thingy@Frixoe:中的
就是我的python终端。别担心:)@Frixoe你可以忽略这一点。这只是一个python术语的提示哦,好的!谢谢!哦我以为我可以用正则表达式解决它,但不知道该用哪一个,非常感谢!但是我不明白你为什么在
thingy@Frixoe:中的
就是我的python终端。别担心:)@Frixoe你可以忽略这一点。这只是一个python术语的提示哦,好的!谢谢!我不太明白。对不起,我对理解比较陌生,所以一行文字看起来很混乱。添加了一点关于理解列表的内容。谢谢!我理解理解!:我不太明白。对不起,我对理解比较陌生,所以一行文字看起来很混乱。添加了一点关于理解列表的内容。谢谢!我理解理解!:D