2016-05-07 13 views
0

正規表現を使用して、ファイル内のすべての単語の先頭/末尾にあるものを置き換えたい。ここではいくつかの例の例は次のとおりです。「INGの」で終わる文字列の末尾にある文字を置換する

  1. 言葉は「GNI」で終了する変更を取得:明確なは「サブ」で始まる =明らかGNI
  2. 言葉をingがで開始する変更を取得します「バス」:サブ道= バス

どのように私は、リスト内のこれらの言葉を隔離し、例の変更を適用することができますか? すべての単語は小文字です。

+0

「Bustract」への変更を「引く」でしょうか? – zondo

+0

ああ、大文字小文字を区別しないようにするには、それを追加してください。 – Scherf

+0

ようこそスタックオーバーフロー。 Stack Overflowの[質問のヘルプ](http://stackoverflow.com/help/asking)をまずチェックしてください。 [どのトピックを私がここで尋ねることができます](http://stackoverflow.com/help/on-topic)、[どのような種類の質問を避けるべきですか?](http://stackoverflow.com/help/dont)に注目してください。 )、[最小限で完全で検証可能なサンプルの作成方法](http:// stackoverflow。 com/help/mcve)と[Stack Overflow question checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)を参照してください。 –

答えて

2

使用\b必ず何かが単語の先頭や末尾にあるようにする:

import re 

sentence = "..." 
converted = re.sub(r'ing\b', 'gni', re.sub(r'\bsub', 'bus', sentence)) 
+0

re.subの先頭にある小文字のrは何ですか? – Scherf

+1

@Scherf:これは、[生の文字列]であることを意味します(https://stackoverflow.com/questions/2081640/what-exactly-do-u-and-r-string-flags-do-in-python-and -what-are-raw-string-l)を指定します。 – zondo

1
import re 

strings = ['clearing', 
      'subtract'] 

for i, string in enumerate(strings): 
    if re.match(pattern='.*ing$', string=string): 
     strings[i] = re.sub(pattern='ing$', repl='gni', string=string) 
    if re.match(pattern='^sub.*', string=string): 
     strings[i] = re.sub(pattern='^sub', repl='bus', string=string) 
print(strings) 
+0

なぜマッチオブジェクトを導入しますか?ちょうど置換をしてください。 – zondo

+0

最初の反復でマッチがなければ、クリア時の 'ing'は 'gni'に置き換えられます。次に、クリアは2番目のパターンと一致せず、subは渡された文字列を返し、クリアがリストに戻されます。それを試してみてください。 – Daniel

+0

その場合、 'strings [i] = ...'を 'string = strings [i] = ...'に変更してください。 – zondo

関連する問題