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

时间:2011-04-27 19:33:56

标签: python wildcard

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

'Hello Worlds'
'Hellos Worlds'
'Jello World'
'Hello Worlded'

如何创建搜索字词,以查找所有实例,例如

'*ello* World*'

其中star是一张外卡,不一定要包含在单词中。

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

5 个答案:

答案 0 :(得分:6)

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

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()

答案 1 :(得分:3)

您描述的*语法称为globbing。它不适用于文档,只适用于文件和目录。正如其他人所指出的那样,正则表达式就是答案。

答案 2 :(得分:2)

你能用正则表达式吗?

import re
m = re.search('\.*ello', somefile)

更多信息:

http://docs.python.org/library/re.html

答案 3 :(得分:2)

如果你正在做任何复杂的事情,那么正则表达式就是你的选择。如果你对这些不满意,我认为对于你的具体问题,你也可以使用“in”。例如:

x = 'hello world'
if 'ello' in x and 'world' in x':
     print 'matches'
else:
     print 'does not match'

答案 4 :(得分:2)

正则表达式通常更好,但如果由于某种原因你想坚持通配符格式,你可以这样做:

from fnmatch import fnmatch

pattern = '*ello* World*'

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