Let
s = 'hello you blablablbalba qyosud'
i = 17
如何获得位置i
的单词? blablablbalba
在我的例子中。
我在想这个,但它似乎不python:
for j, c in enumerate(s):
if c == ' ':
if j < i:
start = j
else:
end = j
break
print start, end
print s[start+1:end]
这是正则表达式的另一种简单方法,
import re
s = 'hello you blablablbalba qyosud'
i = 17
string_at_i = re.findall(r"(w+)", s[i:])[0]
print(re.findall(r"w*%sw*" % string_at_i, s))
更新:以前的模式在有空间时失败。当前的模式可以照顾它!
回答你的第一个问题,
p = s[0 : i].rfind(' '(
Output: 9
对于你的第二个问题,
s[ p + 1 : (s[p + 1: ].find(' '( + p + 1( ]
Output: 'blablablbalba'
描述:
将字符串从起始位置提取到第 i 个位置。
查找上次出现的空格的索引。这将是您所需单词(第二个问题(的起点。
- 从这里转到下一个出现的空格,并提取中间的单词。
以下合并代码应在所有方案中工作:
s = s + ' '
p = s[0 : i].rfind(' ')
s[ p + 1 : (s[p + 1 : ].find(' ') + p + 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']
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
index
或find
从精确位置开始获取space
的索引。在这种情况下,它将查找从 start+1
开始的space
字符位置。然后,如果它找到任何空格,它将打印出两个索引之间的单词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">
您可以使用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
最后用切片生成单词:
>>> s[start+1:(end if end != -1 else None)]
'blablablbalba'
如果s[i]
不是空格,上面将产生单词。如果s[i]
是空格,则结果为空字符串。