在字符串中查找单个或多个单词

2024-09-28 20:52:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个脚本,在给定的字符串中找到一个单词或由多个单词组成的字符串。我找到了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>(当找到单词时)或{}(如果没有找到单词),我希望函数返回True或{},如果找到了单词或没有找到。 因为我不清楚这个函数是如何工作的,所以我不知道该怎么做。在

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


Tags: 函数字符串re脚本noneobjectmatchseek
2条回答

re是正则表达式模块。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。在

^{pr2}$

在您的示例中,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
>>> 
if findWholeWord('seek')(st1) == None:
    return False
else:
    return True

或者:

^{pr2}$

或者:

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

相关问题 更多 >