Python通配符在string中search
让我说我有一个列表
list = ['this','is','just','a','test']
我怎么能让用户做一个通配符search?
search词:'th_s'
会返回'这个'
正则expression式可能是这个问题的最简单的解决scheme:
import re regex = re.compile('th.s') l = ['this', 'is', 'just', 'a', 'test'] matches = [string for string in l if re.match(regex, string)]
使用fnmatch
:
import fnmatch lst = ['this','is','just','a','test'] filtered = fnmatch.filter(lst, 'th?s')
如果你想允许_
作为通配符,只需用'?'
replace所有的下划线'?'
(对于一个字符)或*
(对于多个字符)。
如果您希望用户使用更强大的过滤选项,请考虑允许他们使用正则expression式 。
你的意思是任何特定的通配符语法? 通常*
代表“一个或多个”字符和?
代表一个。
最简单的方法可能是将通配符expression式转换为正则expression式,然后用它来过滤结果。
你可以试试fnmatch模块,它有一个shell般的通配符语法
或者可以使用正则expression式
导入重新
与Yuushi使用正则expression式相同的想法,但是这使用了re库中的findall方法,而不是列表理解:
import re regex = re.compile('th.s') l = ['this', 'is', 'just', 'a', 'test'] matches = re.findall(regex, string)
简单的方法是尝试os.system
:
import os text = 'this is text' os.system("echo %s | grep 't*'" % text)