2017-07-14 4 views
0

私の質問は多かれ少なかれ類似しています: Is there a way to substring a string in Python? しかし、それはより具体的に向けられています。 最初の文字列の2つの既知の単語の間にある文字列のparを取得するにはどうすればよいですか?Pythonの文字列の2つの単語の間にある部分文字列への方法はありますか?

例:「」と「文字列」ことを知って

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

は、部分文字列を取得するために使用できる文字列に2つの知られている言葉です。

ありがとうございました!

+0

文字列を2つの既知の単語の間に挿入しますか?空白が 'Substring'の一部ではないのはなぜですか? –

+0

さらに、 '' the ''と' 'string''が' mySrting'で何回も出現するとどうなりますか? –

+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が唯一の初試合を見つけますので、あなたは非常に効率的に文字列をスキャンするためにこれを使用することができます:私はlist, splitの組み合わせを使用することをお勧め

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

ありがとうございます、これは意図したとおりに動作しています(Y) –

1

およびjoinの方法。 これは、部分文字列内で2語以上を探している場合に役立ちます。

words = list(string.split())

  • はその後、部分文字列を返すあなたの開閉マーカーのインデックスを取得します:

    1. は、配列に文字列を回し

      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は別途ストリングを格納する必要があります。

    説明の間のスペースを使用して単語間のスペースを除外していますが、必要に応じて変更することもできます。

  • 0

    :あなたはまた、このような何かを試すことができ

    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'] 
    
    関連する問題