Python语句ex中的正则表达式

2024-10-02 00:20:45 发布

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

我有一个脚本,给我的句子包含一个指定的关键字列表。句子被定义为两个句点之间的任何东西。在

现在我想用它来选择一个句子,比如“把1.5克的粉末放进去”,如果粉末是一个关键词,它会得到整个句子,而不是“5克粉末”

我想知道如何表达句子介于句点和空格之间。我的新过滤器是:

def iterphrases(text):
    return ifilter(None, imap(lambda m: m.group(1), finditer(r'([^\.\s]+)', text)))

但是现在我不再打印任何句子,只打印单词的片段/短语(包括我的关键词)。我很困惑我做错了什么。在


Tags: text脚本过滤器列表return定义def关键字
3条回答

这里你得到它作为迭代器。与我的测试用例一起工作。它认为一个句子在句点之前是任何东西(非贪心的),句点后面要么是空格,要么是行尾。在

import re
sentence = re.compile("\w.*?\.(?= |$)", re.MULTILINE)
def iterphrases(text):
    return (match.group(0) for match in sentence.finditer(text))

如果您确定.除了句子分隔符之外什么都没有用,并且每个相关的句子都以句点结尾,那么下面的方法可能会有用:

matches = re.finditer('([^.]*?(powder|keyword2|keyword3).*?)\.', text)
result = [m.group() for m in matches]

如果您不必使用迭代器,re.split对于您的用例(句子的自定义定义)来说会更简单一些:

re.split(r'\.\s', text)

注意,最后一句话将包括.或将为空(如果text在最后一个句点后以空格结尾),为了解决这个问题:

^{pr2}$

还要看一下Python - RegEx for splitting text into sentences (sentence-tokenizing)的答案中更一般的情况

对于一个完全通用的解决方案,您需要一个适当的句子标记器,例如^{}

nltk.tokenize.sent_tokenize(text)

相关问题 更多 >

    热门问题