【问题标题】:Python - Having a sub for loop with the same variablePython - 有一个具有相同变量的子 for 循环
【发布时间】:2015-10-30 15:18:45
【问题描述】:

我想知道是否有一种方法,在使用 for 循环遍历字符串时,删除字符串的一部分并用它做其他事情。

基本上,我想从一个字符串 "first part|middle|,end" 开始,并以两个字符串结尾。 “buffer”变量应该包含“first part,end”,第二个字符串应该包含“|middle|”

word = "first portion|middle|,end"
buffer = ''

for i in word:
    if i == '|':
        # Loop in here until another pipeline is found while saving each character
    else:
        buffer += i 

我已经有一个程序可以解析原始字符串并完美地组织它,我只想在 for 循环中有一个 if 语句,它将删除管道之间的任何内容并保存它。如果这不可能,我将重写程序以允许我也这样做。

【问题讨论】:

    标签: python for-loop iteration substring


    【解决方案1】:

    如果字符串结构始终相同,您可以使用正则表达式。

    正则表达式 (.*)(\|.*\|)(.*) 将捕获包含在两个管道之间的任何文本以及它之前和之后的文本((.*) 捕获具有 0 个或更多字符的任何文本字符串)。

    >>> import re
    >>> p = re.compile(ur'(.*)(\|.*\|)(.*)')
    >>> test_str = u"first portion|middle|,end"
    >>> strings = p.match(test_str).groups()
    

    这里strings 将有您想要的部分:

    >>> strings
    (u'first portion', u'|middle|', u',end')
    >>> buffer = strings[0] + strings[2]
    >>> second = strings[1]
    
    >>> buffer
    u'first portion,end'
    >>> second
    u'|middle|'
    

    您可以在regex101 等网站上在线测试正则表达式,不过我建议您将它们用于您知道结构的文本

    【讨论】:

      【解决方案2】:

      如果你确定你的字符串是"str1|str2|str3",你可以使用split

      >>> l = "first portion|middle|,end".split('|')
      >>> l[0]+l[-1]
      'first portion,end'
      >>> l[1]
      'middle'
      

      【讨论】:

        【解决方案3】:

        这不是很优化,但可以解决问题。

        import re
        middle = re.findall('\|[a-zA-Z]+\|', s)[0]
        other = re.split('\|[a-zA-Z]+\|', s)
        

        【讨论】:

          【解决方案4】:

          您在寻找str.split() 函数吗?

          您可以将 PIPE 字符传递给它,它会在找到| 的位置拆分字符串并返回拆分字符串列表。示例 -

          >>> word = "first portion|middle|,end"
          >>> word.split('|')
          ['first portion', 'middle', ',end']
          

          然后,如果您确定始终只有三个元素,请获取第一个和第三个元素,并将它们连接起来以获得您想要的第一个字符串结果,并将第二个元素用于第二个结果。示例 -

          >>> word = "first portion|middle|,end"
          >>> l = word.split('|')
          >>> result1 = l[0] + l[2]
          >>> result2 = l[1]
          >>> result1
          'first portion,end'
          >>> result2
          'middle'
          

          【讨论】:

            猜你喜欢
            • 2018-03-28
            • 2011-10-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多