1

我仍在使用 Python 广告正则表达式学习绳索,我需要一些帮助!我需要一个可以在句子中搜索特定单词的正则表达式。我已经设法创建了一个模式来搜索一个单词,但是我如何检索我需要找到的其他单词?re 模式会如何做到这一点?

>>> question = "the total number of staff in 30?"
>>> re_pattern = r'\btotal.*?\b'
>>> m = re.findall(re_pattern, question)
['total']

它必须寻找“total”和“staff”这两个词谢谢 Mike

4

3 回答 3

8

使用联合运算符|搜索您需要查找的所有单词:

In [20]: re_pattern = r'\b(?:total|staff)\b'

In [21]: re.findall(re_pattern, question)
Out[21]: ['total', 'staff']

这与您上面的示例最接近。但是,这种方法只有在没有其他字符被预先或附加到单词时才有效。这通常出现在主句和从句的末尾,其中逗号、点、感叹号或问号附加到从句的最后一个单词。

例如,在问题中,您的员工有多少人?上面的方法找不到单词staff因为在staff末尾没有单词边界。取而代之的是一个问号。但是,如果您在上面的正则表达式末尾省略第二个\b,则表达式将错误地检测子字符串中的单词,例如total in totaltotalities

完成您想要的最佳方法是首先提取句子中的所有字母数字字符,然后在此列表中搜索您需要查找的单词:

In [51]: def find_all_words(words, sentence):
....:     all_words = re.findall(r'\w+', sentence)
....:     words_found = []
....:     for word in words:
....:         if word in all_words:
....:             words_found.append(word)
....:     return words_found

In [52]: print find_all_words(['total', 'staff'], 'The total number of staff in 30?')
['total', 'staff'] 

In [53]: print find_all_words(['total', 'staff'], 'My staff is totally overworked.')
['staff']
于 2012-12-17T11:47:32.370 回答
2
question = "the total number of staff in 30?"
find=["total","staff"]
words=re.findall("\w+",question)
result=[x for x in find if x in words]
result
['total', 'staff']
于 2012-12-17T12:04:12.907 回答
1

你有没有使用过正则表达式之外的东西?

考虑一下,如果它有效,请从此解决方案扩展

>>> 'total' in question.split()
True

相似地

>>> words = {'total','staff'}
>>> [e   for e in words if e in question.split()]
['total', 'staff']
于 2012-12-17T11:47:37.257 回答