繁体   English   中英

在 Python 中的字符串列表中查找带有表达式的子字符串

[英]Find sub-string with expressions inside a list of string in Python

有一个数组,如下所示。

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']
  1. 有没有一种简单的方法可以找到包含字符串列表中的子字符串的索引?
  2. 例如,我想搜索“leaves,bird*-leaves,bird*”并希望返回相同的索引。

尝试了下面的代码,

def find_index_sub_string(needle,haystack):
    return [i for i, x in enumerate(haystack) if needle in x] 
  1. 能够搜索 leave,bird 但无法搜索如“leaves,bird*-leaves,bird*”

有没有更好的方法来搜索和获取需要的字符串?

更新:

得到它与下面的代码。

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

您可以在http://www.regex101.com上在线开发您的匹配模式 - 并让它向您解释它们。

如果你想从正则表达式开始,这是一个有趣的方法: https : //regexcrossword.com/ (只是一个粉丝,不附属;o)) - 要查看的官方网站是https://docs .python.org/3/library/re.html

我的第二个模式不需要正则表达式-一个简单的if 'tree' in text:将有同样的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM