获取给定位置周围的单词

时间:2017-02-14 08:08:46

标签: python string

return y < x.first;

如何在我的例子中找到位置s = 'hello you blablablbalba qyosud' i = 17 的字,即i

我在考虑这个问题,但似乎是单声道的:

blablablbalba

6 个答案:

答案 0 :(得分:1)

您可以按空格分割单词,然后计算空格数直到阈值参数(i),这将是分割列表中项目的索引。

<强>解决方案:

print (s.split()[s[:i].count(" ")])

修改

如果我们在单词之间有多个空格,我们想要将两个空格(或更多)视为一个空格,我们可以这样做:

print (s.split()[" ".join(s[:i].split()).count(" ")])

<强>输出:

blablablbalba

<强>解释

这个回报是2,因为在17指数之前有两个空格。

s[:i].count(" ") # return's 2 

此返回是按空格分割的列表。

s.split()

您需要的是您从s[:i].count(" ")

获得的相关项目的索引
['hello', 'you', 'blablablbalba', 'qyosud']

答案 1 :(得分:1)

回答你的第一个问题,

  

p = s [0:i] .rfind(&#39;&#39;)

Output: 9

关于第二个问题,

  

s [p + 1:(s [p + 1:]。find(&#39;&#39;)+ p + 1)]

Output: 'blablablbalba'

说明

  1. 从起始位置提取字符串。

  2. 查找最后一次出现的空间的索引。这将是您所需词汇的起点(第二个问题)。

  3. 从这里开始到下一个空格,然后在中间提取单词。
  4. 以下合并代码应适用于所有方案:

    s = s + ' '
    p = s[0 : i].rfind(' ') 
    s[ p + 1 : (s[p + 1 : ].find(' ') + p + 1) ]
    

答案 2 :(得分:1)

这是另一种使用正则表达式的简单方法,

import re
s = 'hello you blablablbalba qyosud'
i = 17
string_at_i = re.findall(r"(\w+)", s[i:])[0]
print(re.findall(r"\w*%s\w*" % string_at_i, s))

更新:当有空间时,先前的模式失败。目前的模式照顾它!

答案 3 :(得分:0)

def func(s, i):
    s1 = s[0:i]
    k = s1.rfind(' ')
    pos1 = k
    s1 = s[k+1:len(s)]
    k = s1.find(' ')
    k = s[pos1+1:pos1+k+1]
    return k

s = 'hello you blablablbalba qyosud'
i = 17
k = func(s, i)
print(k)
output:
blablablbalba 

答案 4 :(得分:0)

您可以使用rfind搜索包含s[i]的上一个空格:

>>> s = 'hello you blablablbalba qyosud'
>>> i = 17
>>> start = s.rfind(' ', 0, i + 1)
>>> start
9

然后,您可以使用find再次搜索以下空格,包括s[i]

>>> end = s.find(' ', i)
>>> end
23

最后使用slice生成单词:

>>> s[start+1:(end if end != -1 else None)]
'blablablbalba'

如果s[i]不是空格,则上面的结果会出现。如果s[i]是空格,则结果为空字符串。

答案 5 :(得分:0)

您可以使用indexfind从精确位置开始获取space的索引。在这种情况下,它将从space开始查找start+1字符位置。然后,如果它找到任何空格,它将打印出两个索引startend之间的单词

s = 'hello you blablablbalba qyosud'
def get_word(my_string, start_index):    
    end = -1
    try:
        end = s.find(' ', start_index + 1)
    except ValueError:
        # no second space was found
        pass
    return s[start_index:end] if end else None
print get_word(s)

输出:'blablablbalba'