[英]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']
尝试了下面的代码,
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
您可以在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.