在给定的位置周围获取单词



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'

描述

  1. 将字符串从起始位置提取到第 i 个位置。

  2. 查找上次出现的空格的索引。这将是您所需单词(第二个问题(的起点。

  3. 从这里转到下一个出现的空格,并提取中间的单词。

以下合并代码应在所有方案中工作:

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 
您可以使用

indexfind从精确位置开始获取space的索引。在这种情况下,它将查找从 start+1 开始的space字符位置。然后,如果它找到任何空格,它将打印出两个索引之间的单词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">

您可以使用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]是空格,则结果为空字符串。

最新更新