gpt4 book ai didi

python - 使用特定单词在字符串中查找 n 个单词的最优雅方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:53 25 4
gpt4 key购买 nike

有一个大字符串,我需要找到恰好包含 N 个单词的所有子字符串(如果可能的话)。

例如:

big_string = "The most elegant way to find n words in String with the particular word"
N = 2
find_sub(big_string, 'find', N=2) # => ['way to find n words']

我尝试用正则表达式解决它,但它碰巧比我最初预期的要复杂。我刚刚忽略了一个优雅的解决方案吗?

更新

我们所说的单词是指由\b 分隔的所有内容

N参数表示'find'每边应该有多少个词

最佳答案

对于您的具体示例(如果我们使用正则表达式的“单词”定义,即任何包含字母、数字和下划线的内容),正则表达式将如下所示:

r'(?:\w+\W+){2}find(?:\W+\w+){2}'

\w 匹配其中一个单词字符。 \W 匹配任何其他字符。我认为您的参数在模式中的位置很明显。您可以将模式与 re.search 一起使用或 re.findall .

问题在于您的查询周围的单词数量是否少于所需数量(即,如果它太靠近字符串的一端)。但是你应该能够逃脱:

r'(?:\w+\W+){0,2}find(?:\W+\w+){0,2}'

感谢贪婪的重复。请注意,在任何情况下,如果您想要多个结果,匹配永远不会重叠。所以如果你使用第一个模式,你只会得到第一个匹配,如果 find 的两次出现彼此接近,而在第二个中,你不会得到 n 第二个 find 之前的单词(已经使用的单词将丢失)。特别是,如果 find 的两次出现比 n 靠得更近,那么第二个 find 将已经是第一个匹配项的一部分,那么你根本无法获得第二场比赛。

如果你想把一个词当作任何不是空白字符的东西,方法看起来很相似:

r'(?:\S+\s+){0,2}find(?:\s+\S+){0,2}'

我想对于其他任何事情,您都必须自己想出字符类。

关于python - 使用特定单词在字符串中查找 n 个单词的最优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com