2017-07-14 80 views
0

我的問題是或多或少類似於: Is there a way to substring a string in Python? 但它是更具體的導向。 如何獲取位於初始字符串中的兩個已知單詞之間的字符串的參數值。有沒有一種方法來處理Python中字符串中的兩個單詞之間的子字符串?

實施例:

mySrting = "this is the initial string" 
Substring = "initial" 

知道「該」和「串」是該串中的兩個已知的話,可以用於獲取子串。

謝謝!

+0

所以你想要兩個已知單詞之間的字符串?爲什麼這些空格不是'Substring'的一部分? –

+0

此外,如果在'mySrting'中多次出現'''和'string',會發生什麼情況? –

+0

@WillemVanOnsem那麼它應該可能會顯示一個字符串列表。 –

回答

2

您可以從這裏簡單的字符串操作開始。 str.index是你最好的朋友,因爲它會告訴你一個字符串中子字符串的位置;你也可以開始在字符串中的某處後來搜索:

>>> myString = "this is the initial string" 
>>> myString.index('the') 
8 
>>> myString.index('string', 8) 
20 

綜觀片[8:20],我們已經接近我們想要的東西:

>>> myString[8:20] 
'the initial ' 

當然,因爲我們找到了起始位置'the',我們需要說明它的長度。最後,我們可能要剝離空白:

>>> myString[8 + 3:20] 
' initial ' 
>>> myString[8 + 3:20].strip() 
'initial' 

相結合,你可以這樣做:

startIndex = myString.index('the') 
substring = myString[startIndex + 3 : myString.index('string', startIndex)].strip() 

如果您想尋找多次比賽,那麼你只需要重複在只查看字符串的其餘部分時這樣做。由於str.index將只找到了第一場比賽,你可以用它來非常有效地掃描字符串:

searchString = 'this is the initial string but I added the relevant string pair a few more times into the search string.' 
startWord = 'the' 
endWord = 'string' 
results = [] 

index = 0 
while True: 
    try: 
     startIndex = searchString.index(startWord, index) 
     endIndex = searchString.index(endWord, startIndex) 

     results.append(searchString[startIndex + len(startWord):endIndex].strip()) 

     # move the index to the end 
     index = endIndex + len(endWord) 

    except ValueError: 
     # str.index raises a ValueError if there is no match; in that 
     # case we know that we’re done looking at the string, so we can 
     # break out of the loop 
     break 

print(results) 
# ['initial', 'relevant', 'search'] 
+0

謝謝,這是按預期工作(Y) –

1

您也可以嘗試這樣的事:

mystring = "this is the initial string" 
    mystring = mystring.strip().split(" ") 
    for i in range(1,len(mystring)-1): 
     if(mystring[i-1] == "the" and mystring[i+1] == "string"): 
      print(mystring[i]) 
0

我建議使用的list, split組合和join方法。 如果您在子字符串中查找多於1個單詞,這應該有所幫助。

  1. 打開字符串轉換成數組:

    words = list(string.split())

  2. 讓您的開啓和關閉標記的指數則返回字符串:

    open = words.index('the') close = words.index('string') substring = ''.join(words[open+1:close])

你可能想用t改善一下他在繼續之前檢查有效性。


如果您的問題變得更加複雜,即多次出現對值,我建議使用正則表達式。如果您在list查看它們

import re substring = ''.join(re.findall(r'the (.+?) string', string))

re應單獨存放子。

我使用描述之間的空格來排除單詞之間的空格,您也可以修改爲您的需要。

相關問題