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

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

问题描述:

我想检查文档中是否包含某个特定术语。但是,有时,这个词有几种形式(复数,过去时等)。如何在Python中使用通配符创建搜索条件?

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

如何创建一个搜索项,它会发现所有实例如

'*ello* World*' 

其中的明星是持外卡并不一定必须包含在字里。

我找到了一个fnmatch模块的文档,但是我看不出如何能够帮助我搜索文档。

+0

听起来像是你可能想单词词根或一些NLTK的东西... – Daenyth 2011-04-27 19:45:39

使用正则表达式,只是遍历文件:

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

非常感谢@photoionized。这正是我所期待的。 – coderman 2011-04-27 19:50:23

你可以使用正则表达式吗?

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

更多在这里:

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

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

+1

除了fnmatch'的'存在。 – 2011-04-27 19:48:31

+1

根据[文档](http://docs.python.org/library/fnmatch.html)的fnmatch是指用于在文件名中使用。 – 2011-04-27 20:14:14

+0

它使用“文件名”作为参数非常多,但无处它说,这是*仅*有关文件名使用。 – 2011-04-27 20:16:18

如果你正在做什么复杂的,正则表达式是要走的路。如果你不满意这些,我认为对于你的具体问题你也可以使用“in”。例如:

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

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

from fnmatch import fnmatch 

pattern = '*ello* World*' 

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