2014-06-14 63 views
0

我正在尝试编码脚本,该脚本将查找给定字符串中的单个单词或由多个单个单词组成的字符串。我发现this answer看起来非常需要,但我不明白它是如何工作的。在字符串中查找单个或多个单词

使用在上述回答中提供的代码,我有这样的:

import re 

def findWholeWord(w): 
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search 

st1 = 'those who seek shall find' 
st2 = 'swordsmith' 

print findWholeWord('seek')(st1)   # -> <match object> 
print findWholeWord('these')(st1)   # -> None 
print findWholeWord('THOSE')(st1)   # -> <match object> 
print findWholeWord('seek shall')(st1) # -> <match object> 
print findWholeWord('word')(st2)   # -> None 

该函数返回像<_sre.SRE_Match object at 0x94393e0>(这个词的时候(一个或多个)被发现)或None(当他们不)并且我希望函数返回,而不是TrueFalse,如果分别找到了单词(或多个)。 由于我不清楚这个函数是如何工作的,我不知道我该怎么做。

我从来没有见过一个函数被调用传递两个变量(?),即:findWholeWord(word)(string),这是干什么的?

回答

0
if findWholeWord('seek')(st1) == None: 
    return False 
else: 
    return True 

或者:

if findWholeWord('seek')(st1): #this is evaluated 'True' 
     #do something 
else: 
     #there is no search match, do something else 

或者:

import re 

def findWholeWord(w, string): 
    pattern = re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE) 
    if pattern.search(string): 
     return True 
    else: 
     return False 
+0

第一:我没有downvote(我不明白用户谁downvote,并没有解释为什么,所以我upvoted你的答案)。你的第一个答案会起作用,但这有点不妥。第二个答案有效,但我仍然想知道双'()()'是如何工作的。你的第三个答案对我来说更加清晰,它的工作很好。谢谢! – Gabriel

+1

@Gabriel我倒下了,因为它没有提供你的问题的答案,它只是一个代码块,没有任何解释 –

1

重正则表达式模块。 findWholeWord创建一个正则表达式对象,它将匹配您传递它的(模式)。 findWholeWord返回一个函数;正则表达式对象的搜索方法 - 注意在return语句结尾缺少'()'。

import re 
def findWholeWord(w): 
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search 

>>> search = findWholeWord('seek') 
>>> print search 
<built-in method search of _sre.SRE_Pattern object at 0x032F70A8> 
>>> 

re.search如果图案被发现或无如果不是返回匹配的对象。匹配对象评估为True。

>>> search = findWholeWord('seek') 
>>> print search 
<built-in method search of _sre.SRE_Pattern object at 0x032F70A8> 
>>> 
>>> match = search('this string contains seek') 
>>> print match, bool(match) 
<_sre.SRE_Match object at 0x032FDC20> True 
>>> match = search('this string does not contain the word you are looking for') 
>>> print match, bool(match) 
None False 
>>> 

在你的榜样,findWholeWord('seek')(st1)呼吁正则表达式匹配'求”的搜索方法,并传递给它的字符串st1

>>> st1 = 'those who seek shall find' 
>>> match = search(st1) 
>>> print match, bool(match) 
<_sre.SRE_Match object at 0x032FDC20> True 
>>> match = findWholeWord('seek')(st1) 
>>> print match, bool(match) 
<_sre.SRE_Match object at 0x032FDC60> True 
>>> 
+1

回答这个问题'我从来没有见过一个函数被传递两个变量(?),即: findWholeWord(word)(string),这是干什么的?' – wwii

+0

谢谢你的详细解释! – Gabriel

相关问题