2016-12-23 9 views
1

は、私は、文字列を持っています。どのように私はそれをPythonで実装できますか? 「は」の間のすべての単語や文字列の句読点/エンドを除去することがあまりにも可能である場合後の最初の単語を削除「ではない」

"grocery store shop, sell milk" 

または

"grocery store, sell milk" 

:私のような結果を探しています。あなたは常にループを使用することができる再使用しない場合は

grocery store shop, sell milk 
+2

のような極端な場合に正しく動作しますか?あなたはループを試みましたか? –

+1

なぜ2つの出力がありますか?最初の結果は唯一の可能性ではありませんか? 2番目の結果。言葉が消えた。 –

+0

@ cricket_007私は正規表現のアプローチ – Chiefscreation

答えて

3

あなたはこのような何かを行うことができます。

def remove_after(string, kwrd): 
    s = string.split(' ') 
    new = [] 
    skip = [] 
    for i,v in enumerate(s): 
     if v != kwrd: 
      if i not in skip: 
       new.append(v) 
     else: 
      skip.append(i+1) 
    return ' '.join(new) 

print(remove_after("grocery store not liquor shop not restaurant, sell milk", 'not')) 
+0

出力: '食料雑貨店、売るミルク' :) – MYGz

+2

これは 'not 'で終わる言葉もまたmanglesします。 'snot salad'はちょうど' s'になります – ThisSuitIsBlackNot

+1

@ThisSuitIsBlackいいえ、ありがとう、私はそれを修正しました – Arkady

0

:あなたはこれを取得します

import re 
s = "grocery store not liquor shop not restaurant, sell milk" 

print (re.sub(r'\s+not \w+', '', s)) 

+0

OPは明示的にreを望みます。 –

1

あなたは、次の句読点や行末までの文字を削除し、これを試してみたい場合:基本的に

'grocery store, sell milk' 

s = "grocery store not liquor shop not restaurant, sell milk" 
re.sub(r'\b\s*not\s+[\w\s]+', '', s) 

結果、その任意の文字列を削除"not"で始まり、続いて空白が続き、その後に利用可能なすべての非(単語またはスペース)文字、つまり句読点が続きます。あなたはコンマあまりにも後ろを取り除きたい場合は、この修正を試してみてください。

s = "grocery store not liquor shop not restaurant, sell milk" 
re.sub(r'\b\s*not\s+[\w\s]+[^\w\s]?', '', s) 

末尾?は、行末が実際の赤点斑と同様に一致していることを保証します。

これらの式は、正規表現をする必要もありません

not milk 
関連する問題