0

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

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

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"有效 - 所以我可以匹配 1 个单词(如果存在) - 看起来(.*?)应该匹配一个字符,每个单词中至少有一个字符,所以我想这就是它起作用的原因。我不确定是否(.*?)正确使用但这是我研究后迄今为止我所做的最好的工作。对此的任何建议将不胜感激。请注意,上面我(.*?)在文本中似乎显示出某种(.*?)标签,只是格式化字符串之间(.*?)

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

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

如何使用 python 匹配文本文件中的单词?

4

1 回答 1

1

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

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

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)。

美元符号不被视为单词,因为根据使用的-definition它不是单词字符。\b

如果你想得到一个字符串中的第一个单词,如果有一个单词可以使用:

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

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

于 2013-04-16T09:30:17.933 回答