如何在Python中使用通配符创建搜索条件?
我想检查文档中是否包含某个特定术语。但是,有时,这个词有几种形式(复数,过去时等)。如何在Python中使用通配符创建搜索条件?
'Hello Worlds'
'Hellos Worlds'
'Jello World'
'Hello Worlded'
如何创建一个搜索项,它会发现所有实例如
'*ello* World*'
其中的明星是持外卡并不一定必须包含在字里。
我找到了一个fnmatch模块的文档,但是我看不出如何能够帮助我搜索文档。
使用正则表达式,只是遍历文件:
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()
非常感谢@photoionized。这正是我所期待的。 – coderman 2011-04-27 19:50:23
你可以使用正则表达式吗?
import re
m = re.search('\.*ello', somefile)
更多在这里:
的*语法,描述被称为globbing。它不适用于文档,只是文件和目录。正如其他人所指出的那样,正则表达式就是答案。
除了fnmatch'的'存在。 – 2011-04-27 19:48:31
根据[文档](http://docs.python.org/library/fnmatch.html)的fnmatch是指用于在文件名中使用。 – 2011-04-27 20:14:14
它使用“文件名”作为参数非常多,但无处它说,这是*仅*有关文件名使用。 – 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)
听起来像是你可能想单词词根或一些NLTK的东西... – Daenyth 2011-04-27 19:45:39