我想檢查文檔中是否包含某個特定術語。但是,有時,這個詞有幾種形式(複數,過去時等)。如何在Python中使用通配符創建搜索條件?
'Hello Worlds'
'Hellos Worlds'
'Jello World'
'Hello Worlded'
如何創建一個搜索項,它會發現所有實例如
'*ello* World*'
其中的明星是持外卡並不一定必須包含在字裏。
我找到了一個fnmatch模塊的文檔,但是我看不出如何能夠幫助我搜索文檔。
我想檢查文檔中是否包含某個特定術語。但是,有時,這個詞有幾種形式(複數,過去時等)。如何在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