让
return y < x.first;
如何在我的例子中找到位置s = 'hello you blablablbalba qyosud'
i = 17
?的字,即i
。
我在考虑这个问题,但似乎是单声道的:
blablablbalba
答案 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'
说明:
从起始位置提取字符串。
查找最后一次出现的空间的索引。这将是您所需词汇的起点(第二个问题)。
以下合并代码应适用于所有方案:
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)
您可以使用index
或find
从精确位置开始获取space
的索引。在这种情况下,它将从space
开始查找start+1
字符位置。然后,如果它找到任何空格,它将打印出两个索引start
和end
之间的单词
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'