2017-10-13 10 views
1

部分文字列が存在する行を含む行を抽出しようとしているときに問題が発生しています。部分文字列を含む行と、部分文字列の後ろの行を含むすべての行をPythonで抽出します。

s=""" 
    This is so awesome 
    I need to do this more often 
    This forum rocks 
    Help me 
    """ 

私は検索ストリングがフォーラムであれば、私は

this forum rocks 
    Help me 

として結果を取得したい私は、次の文

s.lower().split("forum",1)[1] 

を使用してみました、私の出力は

です
forum rocks 

何か助けていただければ幸いです。

+1

**ヒント:**最初にしてみてくださいフォーラムという言葉を含む*行*を見つけてください。 – wim

+0

行には隠れた ''\ n' 'がありますか? – pstatix

答えて

1

1行のソリューション

This forum rocks 
    Help me 
+0

あなたの答えに基づいて、この解決法は、 "フォーラム"の前のテキストを切り捨てることになりますか? – ayushman999

+0

@ ayushman999、どういう意味ですか? – RomanPerekhrest

+0

私は今、 "forum"という単語を含む行の上の行を抽出しようとしていました。 \出力はこの '結果= re.search(R '(。*)(?= \ nを使用し、ayushman999 @ – ayushman999

1

文字列を行ごとに分割し、各行で目的の単語を検索することをお勧めします。

s=""" 
This is so awesome 
I need to do this more often 
This forum rocks 
Help me 
""".split('\n') 
for line in range(len(s)): 
    if "forum" in s[line]: 
     print(s[line]) 
     print(s[line+1]) 

限り、複数行の文字列がその中にテキストとの最後の行の後に次の行に終わるよう、リストの境界の外に行くことはありません。前の行に最後に"""がある場合は、Help meの横に範囲チェックをする必要があります。

編集:質問を再読します。あなたはフォーラムが見つかった後にすべて行しますか?私が前に示した例では、の次の行が得られます。キーワードが発見された後、全ての行については、この使用:

s=""" 
This is so awesome 
I need to do this more often 
This forum rocks 
Help me 
""".split('\n') 
found = False 
for line in range(len(s-1)): 
    if "forum" in s[line] or found: 
     print(s[line]) 
     found = True 

len(s-1)部分はオプションです。末尾の空白行を結果に含めるかどうかによって異なります。最後の空白行が必要な場合は、len(s)に戻してください。

1

これを試してください。任意の数の行を含む文字列に対して機能します。

s=""" 
    This is so awesome 
    I need to do this more often 
    This forum rocks 
    Help me 
    """ 
s=s.split('\n') 
c=0 
for i in s: 
    if i.find("forum")!=-1: # no match, find returns -1 
     print "\n".join(s[c:]) 
    c+=1 

は出力:だから

This forum rocks 
Help me 

、基本的にあなたの一致が見つかり、その後にそうであったよう\nと結合することにより、その後のすべてを(返却された配列のインデックスを見つけます元の文字列)。

import re 

s=""" 
    This is so awesome 
    I need to do this more often 
    This forum rocks 
    Help me 
    """  
result = re.search(r'.*\bforum[\s\S]*', s, re.M).group() 
print(result) 

出力:re.search()機能付き

1
l = s.split('\n') 
for n, str in enumerate(l): 
    if 'forum' in str: 
     print ('\n'.join(l[n:])) 
     break 

出力:

This forum rocks 
    Help me 
関連する問題