2017-02-14 59 views
2

字讓獲取圍繞給定位置

s = 'hello you blablablbalba qyosud' 
i = 17 

如何繞過i位置的字?blablablbalba在我的例子。


我在想這件事,但似乎unpythonic:

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] 
+0

怎麼樣從s中的第i個元素開始向後;存儲所有東西,直到你遇到空白爲止;然後反轉打印存儲的字符串。 – Anupam

回答

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 
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'] 
+0

非常好的解決方案! – Basj

+0

@Basj,謝謝:) –

+0

如果's ='你好你blablablbalba''它不起作用。任何關於在這種情況下都可以使用的解決方案的想法? – Basj

1

要回答你的第一個問題了,

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) ] 
+0

@Basj,這段代碼適用於所有場景 – satnam

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 

最後使用切片生成字:

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

以上將導致在案件s[i]單詞不是空白。如果s[i]是空格,則結果爲空字符串。

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)) 

更新時間:先前的模式是失敗的時候有空間。當前模式照顧它!

0

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