我有下面的绳子:
text = "I love jam. I like all other kinds of confectionery as well--cakes and croissants and things. Bagels too! Carbs for the win I say. And my other favorite kinds of food are mostly bread based - bread itself, so many different kinds of bread. I love the ones with herbs and cheese in it. I like pizza as well, and garlic bread. But most of all, jam."
现在,我想找出“果酱”、“比萨饼”和“大蒜”这三个词在哪里相邻。所以我使用这个正则表达式:
^{pr2}$这将产生以下输出:
[('pizza', 'garlic', 'jam')]
现在,我需要的是课文中这些词相互接近的部分。我试着标记文本,并在列表中反复查看单词是否在每个句子中,并将其打印出来,但这会在文本开头捕捉到错误的“jam”。这不是我需要的-我只需要包含所有三个单词彼此靠近的那部分文本。在
一旦在课文中发现这三个词很接近,有没有什么方法可以让你在前面说10个词,在后面说10个词?或者我怎样才能得到包含这些单词的句子(而不是包含它们但不相关的句子,比如本文的第一个句子)?在
对于这样的问题,你需要确保你有3个词在你的匹配,这应该是最小的长度。用于问题的第一部分,我们需要一个模式来匹配我们的单词和其他单词的任何组合,而且它必须包含所有单词,因此您不能做如下操作:
因为它将与
^{pr2}$jam ...pizza...jam
匹配。您需要为正则表达式创建所有可以用itertools.permutations
完成的可能性,因此必须选择以下一种情况:注意在前面的组中,由于您希望最小匹配,因此您必须在句子的前导和尾随中各有一个单词(因为如果您有另一个单词,那么在这个句子中它的冗余考虑(
this is jam and pizza and garlic
)是多余的,this is
是多余的),所以我们在这里创建所有的可能性来优化我们的拒绝额外搜索的正则表达式:相关问题 更多 >
编程相关推荐