【问题标题】:How to get the substring between two markers in Python multiple times?如何多次获取Python中两个标记之间的子字符串?
【发布时间】:2021-04-21 22:52:44
【问题描述】:

我有以下代码:

s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''

for i in s:
    start = s.find('alt="') + len('alt="')
    end = s.find('"/>')
    substring = s[start:end]
    print(substring)

但它只打印了很多次“Thunder Force”。我希望它找到“Thunder Force”和“Godzilla vs. Kong”并分别打印这两个。怎么样?

【问题讨论】:

    标签: python string substring


    【解决方案1】:

    你可以使用正则表达式

    import re
    s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
    x = re.findall(r'alt="(.*?)"/>', s)
    print(x)
    

    输出

    ['Thunder Force', 'Godzilla vs. Kong']
    

    【讨论】:

      【解决方案2】:

      使用regexre.findall()

      s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
      
      print(re.findall(r'(?<=alt\=").*?(?="/>)', s))
      #['Thunder Force', 'Godzilla vs. Kong']
      

      【讨论】:

        【解决方案3】:

        这是一个非正则表达式解决方案,看起来更像我认为您通过发布的尝试尝试实现的目标:

        start = 0
        while True:
            start = s.find('alt="', start)
            if start == -1:
                break
            start += len('alt="')
            end = s.find('"/>', start)
            if end == -1:
                break
            substring = s[start:end]
            start = end
            print(substring)
        

        【讨论】:

          【解决方案4】:

          您还可以使用negated character class [^"]+ 匹配除" 之外的任何字符,如果您想匹配至少一个字符,则重复1 次以上。

          如果空匹配也可以,可以用*代替+

          import re
          s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
          x = re.findall(r'alt="([^"]+)"/>', s)
          print(x)
          

          输出

          ['Thunder Force', 'Godzilla vs. Kong']
          

          【讨论】:

            猜你喜欢
            • 2011-06-07
            • 1970-01-01
            • 2015-06-24
            • 1970-01-01
            • 1970-01-01
            • 2020-09-08
            • 2019-12-02
            相关资源
            最近更新 更多