Python通配符搜索字符串

Aus*_*tin 61 python

让我们说我有一个清单

list = ['this','is','just','a','test']
Run Code Online (Sandbox Code Playgroud)

如何让用户进行通配符搜索?

搜索词:'th_s'

会回来'这个'

phi*_*hag 140

用途fnmatch:

import fnmatch
lst = ['this','is','just','a','test']
filtered = fnmatch.filter(lst, 'th?s')
Run Code Online (Sandbox Code Playgroud)

如果要允许_作为通配符,只需用(对于一个字符)或(对于多个字符)替换所有下划线.'?'*

如果您希望用户使用更强大的过滤选项,请考虑允许他们使用正则表达式.

  • 不应该是'th?s`? (2认同)
  • @cowlinator 文件名匹配的方法称为_Unix文件匹配_,因为它起源于Unix,但它与操作系统无关,就像阿拉伯数字在英语中也起作用一样。 (2认同)

Yuu*_*shi 51

正则表达式可能是解决此问题的最简单方法:

import re
regex = re.compile('th.s')
l = ['this', 'is', 'just', 'a', 'test']
matches = [string for string in l if re.match(regex, string)]
Run Code Online (Sandbox Code Playgroud)

  • 正则表达式如何处理通配符? (8认同)
  • 这不应该被接受(答案是regex不会处理通配符匹配)-例如,我正在寻找纯通配符解决方案(由@phihag提供),并且我已经对regex熟悉 (4认同)

Mun*_*sin 6

您可以尝试fnmatch模块,它具有类似于shell的通配符语法

或可以使用正则表达式

汇入