Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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_Python 2.7 - Fatal编程技术网

在Python中查找字符串列表中包含表达式的子字符串

在Python中查找字符串列表中包含表达式的子字符串,python,python-2.7,Python,Python 2.7,创建一个数组,如下所示 arrayy = ['top,tree,branch,bla-top,tree,ascb-red/blue', 'tree,leaves,mmn-tree,leaves,mscb-gra/gre', 'leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee','tree,leaves,mount-road,cycle-roo/soo'] 有没有一种简单的方法可以找到在字符串列表中包含子字符串的索引 例如,我想搜索“leave

创建一个数组,如下所示

arrayy = ['top,tree,branch,bla-top,tree,ascb-red/blue', 'tree,leaves,mmn-tree,leaves,mscb-gra/gre', 'leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee','tree,leaves,mount-road,cycle-roo/soo']
  • 有没有一种简单的方法可以找到在字符串列表中包含子字符串的索引
  • 例如,我想搜索“leaves,bird*-leaves,bird*”,并想返回相同的索引
  • 尝试了下面的代码

    def find_index_sub_string(needle,haystack):
        return [i for i, x in enumerate(haystack) if needle in x] 
    
  • 能够搜索树叶,小鸟,但不能像“树叶,小鸟*-树叶,小鸟*”这样搜索
  • 有没有更好的方法来搜索和获取所需字符串

    更新:

    让它与下面的代码一起工作

    search_re = re.compile("leaves,bird.*-leaves,bird.*")
    
    for i in range (len(arrayy)):
        if re.match(search_re, arrayy[i]):
            print i
    

    大多数情况下,您希望在文本中找到(复杂)模式,正则表达式可以做到这一点:

    import re
    
    data = ['top,tree,branch,bla-top,tree,ascb-red/blue', 
            'tree,leaves,mmn-tree,leaves,mscb-gra/gre', 
            'leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee',
            'tree,leaves,mount-road,cycle-roo/soo']
    
    patt1 = r"leaves,bird.*-leaves,bird" 
    patt2 = r"tree" 
    
    for patt in (patt1,patt2):
        print (f"'{patt}' in text:") # py 3, for 2 use: print '{} in text:'.format(patt)
        for idx,text in enumerate(data): 
            if re.search(patt,text):   # modified from re.match wich only looks at start of text
                print(idx, text)    # py 3, for 2 use: print idx,text
    
    输出:

    'leaves,bird.*-leaves,bird' in text:
    2 leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee
    'tree' in text:
    1 tree,leaves,mmn-tree,leaves,mscb-gra/gre
    3 tree,leaves,mount-road,cycle-roo/soo
    
    你可以在线开发你的匹配模式,f.e.on-并让它向你解释它们

    如果你想从regex开始,这是一个有趣的方式:(只是一个粉丝,不是附属的;o))-官方网站应该是


    我的第二个模式不需要正则表达式-如果文本中的“树”是一个简单的
    也会有同样的效果。

    大多数时候,你想在文本中找到(复杂的)模式,正则表达式可以做到:

    import re
    
    data = ['top,tree,branch,bla-top,tree,ascb-red/blue', 
            'tree,leaves,mmn-tree,leaves,mscb-gra/gre', 
            'leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee',
            'tree,leaves,mount-road,cycle-roo/soo']
    
    patt1 = r"leaves,bird.*-leaves,bird" 
    patt2 = r"tree" 
    
    for patt in (patt1,patt2):
        print (f"'{patt}' in text:") # py 3, for 2 use: print '{} in text:'.format(patt)
        for idx,text in enumerate(data): 
            if re.search(patt,text):   # modified from re.match wich only looks at start of text
                print(idx, text)    # py 3, for 2 use: print idx,text
    
    输出:

    'leaves,bird.*-leaves,bird' in text:
    2 leaves,bird,responder,mon-leaves,bird,ascb-yoo/yee
    'tree' in text:
    1 tree,leaves,mmn-tree,leaves,mscb-gra/gre
    3 tree,leaves,mount-road,cycle-roo/soo
    
    你可以在线开发你的匹配模式,f.e.on-并让它向你解释它们

    如果你想从regex开始,这是一个有趣的方式:(只是一个粉丝,不是附属的;o))-官方网站应该是


    我的第二个模式不需要正则表达式-一个简单的
    如果文本中的“tree:
    也会有同样的效果。

    对于
    leaves,bird*-leaves,bird*
    search,你需要使用
    search\re=re.compile(“leaves,bird.*-leaves,bird.*”)
    在循环外,然后在循环内执行if
    search\re.search()
    。但是如果我进行搜索,那会返回所有索引吗?或者我需要循环获取索引吗?您仍然需要以类似的方式迭代@Patrick Artner的解决方案
    “leaves,bird*-leaves,bird*”
    不存在于
    arrayy中的任何字符串中,对吗?我没有完全理解你问的问题。有人能给我解释一下吗。@Ch3steR我正在尝试使用*表达式搜索该字符串,即不提供完整的绝对字符串。对于
    leaves,bird*-leaves,bird*
    search,您需要使用
    search\re=re.compile(“leaves,bird.*-leaves,bird.*])
    从循环中退出,然后执行if
    search\re.search()
    在您的环路中。但是如果我进行搜索,那会返回所有索引吗?或者我需要循环获取索引吗?您仍然需要以类似的方式迭代@Patrick Artner的解决方案
    “leaves,bird*-leaves,bird*”
    不存在于
    arrayy中的任何字符串中,对吗?我没有完全理解你问的问题。有人能给我解释一下吗。@Ch3steR我正在尝试使用*表达式搜索该字符串,即不提供完整的绝对字符串。使用
    re.search()
    而不是
    re.match()
    不是更好吗。可能会慢一些,但会匹配条目不以“叶子”开头的情况,例如:“mount cycle,tree,leaves,mount road,cycle roo/soo”@urban good point,如果它在字符串内,则重新匹配将无法获得它。结合您的建议。#最好使用
    re.search()
    而不是
    re.match()
    。可能会慢一些,但会匹配条目不以“叶子”开头的情况,例如:“mount cycle,tree,leaves,mount road,cycle roo/soo”@urban good point,如果它在字符串内,则重新匹配将无法获得它。采纳你的建议#