如何在Python中使用通配符创建搜索项?

cod*_*man 5 python wildcard

我想检查文档中是否包含某个术语.然而,有时,这个词有几种形式(复数,过去时等).

'Hello Worlds'
'Hellos Worlds'
'Jello World'
'Hello Worlded'
Run Code Online (Sandbox Code Playgroud)

如何创建一个搜索词,找到所有实例,如

'*ello* World*'
Run Code Online (Sandbox Code Playgroud)

星星是一张外卡,不一定要包含在单词中.

我找到了fnmatch模块的文档,但我看不出它如何帮助我搜索文档.

pho*_*zed 7

使用正则表达式并循环遍历文件:

import re
f=open('test.file.here', 'r')

pattern = re.compile("^[^\s]*ello[^\s]*\sWorld[^\s]*$")

for line in f:
  if pattern.match(line):
    print line,

f.close()
Run Code Online (Sandbox Code Playgroud)


sed*_*nym 5

我通常会选择正则表达式,但如果出于某种原因你想坚持使用通配符格式,你可以这样做:

from fnmatch import fnmatch

pattern = '*ello* World*'

with open('sample.txt') as file:
    for line in f:
        if fnmatch(line, pattern):
            print(line)
Run Code Online (Sandbox Code Playgroud)

  • “正则表达式通常更好。” 是的,嗯...这就像你的意见,伙计。哈哈,我想说,当您搜索通配符无法使用的非常精确的内容时,它们会更好。对于其他一切,通配符可能更好。更容易学习、更容易编写、更容易维护。但是,嘿...这就像我的意见,伙计...:) (2认同)
  • 你说的对!我编辑了这篇文章以淡化我的观点。 (2认同)