2013-04-15 78 views
0

问题是我试图匹配一个词(任何一方的空格),如果它存在。Python:匹配一个单词(用空格)

我有工作(至少大部分)的代码是:

import re, os 

str1 = "the host offered $ rec*ting advice" 
str1 = re.sub('[*]', '(.*?)', str1) 
str1 = re.sub('[$]', '(.*?)', str1) 
str1 = str1.lower() 
print str1 
previous_dir = os.getcwd() 
os.chdir('testfilefolder') 
for filename in os.listdir('.'): 
    with open(filename) as f: 
     file_contents = f.read().lower() 
    output = re.search("%s" % str1, file_contents) 
    if output: 
     print (" Match found in " + filename)) 

因此,举例来说,如果我有字符串"the host has offered some recruiting advice"并做字符串搜索将无法正常工作 - 由于美元符号(这是由(.*?)取代。有趣的是,如果我有"the host offered $ rec*ting advice" - 注意“一些”已经消失,因此这个作品 - 所以我可以匹配1个词,如果它存在 - 看起来像(.*?)应该匹配一个字符,每个单词至少有一个字符,所以我想这就是为什么它可行。我不确定(.*?)是否适合使用,但它是bes在我的研究结束后,我已经开始工作了。任何意见,将非常感激。注意上面我在文字中有(.*?),它似乎显示(.*?)是某种标记,只是在(.*?)之间对字符串进行格式化。

但是我想匹配0或1个单词。我发现了一些类似于\ bs + \ b的东西(我不太记得,但又找不到它),但无法让它正常工作。我知道\ b应该匹配一个单词可能存在的任何一边的空字符串。

我appologize,如果这个问题被问到别处,但似乎我发现的一切(我仍然可以找到并能够得到工作)正在寻找一个特定的词 - 但我期待看到,如果只有0或1存在:

How do I match a word in a text file using python?

+0

我指的网页示例是:http://stackoverflow.com/questions/5228448/how-do-i-match-a-word-in-a-text-file-using-python – Relative0

+0

'sub'的第二个参数是*替换*模式。任何与'[*]'(一个星号)匹配的内容都会被第二个字符串'(。*?)'替代,它只支持引用捕获组的替换占位符。 –

+2

你的问题很难理解。用两边的空格来匹配一个词:'re。搜索('yourword',str1)'。这不符合你的要求? – MikeM

回答

0

你提的问题是很难理解,所以这是可能不是您要寻找什么,但它可以帮助您在正确的方向。

如果你想找到的所有单词,在这个文本是如何能够做到:

import re 
str1 = "the host offered $ rec*ting advice" 
re.findall(r'\b\S+\b',str1) 

这将产生:

['the', 'host', 'offered', 'rec*ting', 'advice'] 

\b -thing在图案不实际上是匹配一个字符,而是字符串中一个字开始或结束的位置(有关详细信息,请参见http://docs.python.org/2/library/re)。

美元符号不被认为是一个字,因为它不是字符根据\b-使用的定义。

如果你想在一个字符串的第一个字,如果有一个词有让你可以使用:

re.findall(r'\b\S+\b',str1)[:1] 

你会再拿到零个或一个元素的列表!