【问题标题】:Find Strings Located Between Specific Strings in List Python在 List Python 中查找位于特定字符串之间的字符串
【发布时间】:2021-02-11 04:39:45
【问题描述】:

我正在编写从网站中提取数据的代码,并打印出特定标签之间的所有文本。每次代码从标签中提取数据时,我都会将结果存储到一个列表中,所以我的列表看起来像

Warning
Not
News
Legends
Name1
Name2
Name3
Pickle
Stop
Hello

我想查看这个字符串列表,并编写代码来找到关键字 legendspickle 并打印它们之间的任何字符串。

为了在进一步的活动中详细说明,我可能会创建一个包含所有可能的legend names 的完整列表,然后,如果它们在我生成列表时出现,则打印出那些再次出现的。对这些问题有任何见解吗?

【问题讨论】:

    标签: python string list substring


    【解决方案1】:

    试试这个:

    words = [
        "Warning", "Not", "News", "Legends", "Name1",
        "Name2", "Name3", "Pickle", "Stop", "Hello"
    ]
    words_in_between = words[words.index("Legends") + 1:words.index("Pickle")]
    print(words_in_between)
    

    输出:

    ['Name1', 'Name2', 'Name3']
    

    这假设"Legends""Pickle" 在列表中恰好出现一次。

    【讨论】:

      【解决方案2】:

      您可以使用list.index() 方法在列表中查找项目的数字索引,然后使用列表切片返回列表中这两点之间的项目:

      your_list = ['Warning','Not','News','Legends','Name1','Name2','Name3','Pickle','Stop','Hello']
      your_list[your_list.index('Legends')+1:your_list.index('Pickle')]
      

      需要注意的是.index() 仅返回给定项目第一次出现的索引,因此如果您的列表有两个“图例”项目,您将只返回第一个索引。

      【讨论】:

        【解决方案3】:

        对于第二种方法,您可以创建预期匹配名称的正则表达式替换,然后使用列表推导生成匹配列表:

        tags = ['Warning', 'Not', 'News', 'Legends', 'Name1', 'Name2', 'Name3', 'Pickle', 'Stop', 'Hello']
        names = ['Name1', 'Name2', 'Name3']
        regex = r'^(?:' + r'|'.join(names) + r')$'
        matches = [x for x in tags if re.search(regex, x)]
        print(matches)  # ['Name1', 'Name2', 'Name3']
        

        【讨论】:

          【解决方案4】:

          您可以使用list.index() 获取legendspickle 第一次出现的索引。然后你可以使用 list slicing 来获取它们之间的元素

          l = ['Warning','Not','News','Legends','Name1','Name2','Name3','Pickle','Stop','Hello']
          l[l.index('Legends')+1 : l.index('Pickle')]
          
          ['Name1', 'Name2', 'Name3']
          

          【讨论】:

            【解决方案5】:

            numpys 函数为您提供给定项目的所有出现。所以首先让 lsit 成为一个 numpy 数组

            my_array = numpy.array(["Warning","Not","News","Legends","Name1","Name2","Name3","Pickle","Stop","Hello","Legends","Name1","Name2","Name3","Pickle",])
            

            从这里开始你可以使用numpy的方法了:

            legends = np.where(my_array == "Legends")
            pickle = np.where(my_array == "Pickle")
            

            连接更容易循环

            stack = np.concatenate([legends, pickle], axis=0)
            

            寻找图例和泡菜之间的值

            np.concatenate([my_list[stack[0, i] + 1:stack[1, i]] for i in range(stack.shape[0])] )
            

            我的结果是:

            array(['Name1', 'Name2', 'Name3', 'Name1', 'Name2'], dtype='<U7')
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-01-18
              • 2021-11-05
              • 2015-08-31
              • 1970-01-01
              • 2016-05-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多