Python:匹配单个单词(带空格)

时间:2013-04-15 14:01:36

标签: python regex wildcard

问题在于我试图匹配一个单词(两边的空格),如果它存在的话。

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

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 some $ rec*ting advice"进行搜索则无效 - 由于美元符号(由(.*?)替换。有趣的是,如果我有"the host offered $ rec*ting advice" - 注意“some”已经消失,因此这有用 - 所以我可以匹配1个单词,如果它存在 - 看起来像(.*?)应该匹配一个字符,每个单词中至少有一个字符,所以我想这就是它工作的原因。我不确定(.*?)是否正确使用,但这是我研究后到目前为止最好的工作。关于这方面的建议将非常感激。注意上面我在(.*?)文本中似乎显示(.*?)某种标记,只是格式化(.*?)之间的字符串的。

但我希望匹配0或1个单词。我之前找到了类似于\ bs + \ b的东西(我不记得了,我再也找不到了),但无论如何都无法让它工作。我知道\ b应该匹配一个单词可能存在的任何一方的空字符串。

我道歉,如果在其他地方问这个问题,但似乎我找到的所有东西(我仍然可以找到并且能够正常工作)正在寻找一个特定的词 - 但我希望看看是否只有0或1存在:

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

1 个答案:

答案 0 :(得分:1)

你的问题很难理解,所以这可能不是你想要的,但它可以帮助你朝着正确的方向发展。

如果您想查找文本中的所有单词,可以这样做:

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

这将产生:

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

模式中的\b - 事实上并不匹配字符,而是字符串中单词开头或结尾的位置(有关详细信息,请参阅http://docs.python.org/2/library/re。)

根据\b定义,美元符号不被视为单词,因为它不是单词字符。

如果您想获得字符串中的第一个单词,那么可以使用:

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

然后,您将获得零个或一个元素的列表!