问题在于我试图匹配一个单词(两边的空格),如果它存在的话。
我工作的代码(至少大部分是):
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存在:
答案 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]
然后,您将获得零个或一个元素的列表!