在字符串中查找单个或多个词
我正在尝试编写一个脚本,用来在给定的字符串中查找一个单词或者由多个单词组成的字符串。我找到了一些答案,感觉很符合我的需求,但我不太明白它是怎么工作的。
根据上面提到的答案中的代码,我得到了这个:
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
(表示没有找到)。我希望这个函数能返回 True
或 False
,分别表示是否找到了单词。因为我不太清楚这个函数是怎么工作的,所以不知道该怎么做。
我从来没见过一个函数调用时传递两个变量,比如:findWholeWord(word)(string)
,这是什么意思呢?
2 个回答
1
re是一个处理正则表达式的模块。findWholeWord
这个函数会创建一个正则表达式对象,用来匹配你传入的那个单词(模式)。findWholeWord
返回的是一个函数;这个函数实际上是正则表达式对象的搜索方法——注意返回语句后面没有'()'。
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
会返回一个匹配对象,如果找到了模式;如果没找到,则返回None。匹配对象的值会被认为是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)
是在调用一个正则表达式的搜索方法,这个正则表达式是用来匹配`seek`的,并且把字符串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
>>>
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