2017-02-15 15 views
0

私は、クリーンアップしようとしている言葉のリストがたくさんあります。これらの言葉の多くは、毎回少しずつ異なって書かれているようです。私はそれらを正規化したいと思います。ただsuperintendent一致する単語がある場合は文字列全体を置換してください

list = ["resident super", "super live in", "on site superintendent in building", "livein super", "residential super", "superintendent lives in", "on-site super"...] 

私は

for item in list: 
    re.sub("resident super|super live in|on site superintendent in building| livein super|residential super|superintendent lives in|on-site super", 
      "superintendent", list) 

でこれを行うことができます考え出したが、私はいくつかのエントリを欠場する確信している:例えば私は、次の単語を交換したいと思います。すべてのエントリには単語superが含まれていますが、アイテム全体を目的の単語に置き換える正規表現ルールを使用する方法はありますか?

+0

問題は交換したいということですスペースで区切られた単語のリスト。だからあなたは網羅的でなければならない、あるいは正規表現は単語の置き換えをいつ開始/停止するかを知らないだろう。例えば:「私は人生のスーパーです」:どこで交換をやり始めますか? –

+0

あなたの "単語"が行ごとに提供されている場合は、\ bsuper \ bと単純に一致し、文字列全体を置き換えることができます。 –

+0

私は 'for'ループを使ってリストの各メンバーを反復することを考えていました。そのメンバーが「super」という単語を含む場合、メンバー全体を '監督者 'に置き換える必要があります。 – Lukasz

答えて

1

re.subメソッドは、文字列の代わりに使用されません。 Pythonの文字列は不変なので、できません。文字列の代入を行うと、要求された変更を含む新しい文字列(または一致しない場合は元の文字列)が返されます。あなたは現在戻り値を無視しているので、コードは効果がありません。

しかし、私はあなたが実際にこの問題について正規表現を全く必要としないと思います。あなたは、文字列"superintendent"と言葉どこでもsuperを言及任意の文字列を置換したい場合は、単純なサブストリングテストを使用することができます。

for i, item in enumerate(list_of_strings): 
    if "super" in item: 
     list_of_strings[i] = "superintendent" 

もちろんこの意志はあなたの現在の正規表現を使用するよりも偽陽性になりやすいこと。必要であれば上記のコードの構造をそのまま使うことができます(を必要な文字列に一致する正規表現に設定した後にif "super" in item:行をif re.search(pattern, item):に変更するだけです)。

1

私はあなたの質問を理解していますが、superintendantという単語ですべての要素をsuperに置き換えたい場合は、ここをクリックしてください。ところで

for index,element in enumerate(listToCheck): 
    if "super" in element: 
     listToCheck[index]="superintendant" 

はあなたの変数に名前を付けていないlistそれは予約Pythonのキーワードだからです。

1

私はあなたの質問を誤解しているかもしれませんが、代わりにinを使用できませんでしたか?これは、正規表現がかなり遅くなるので、正規表現を保証するようには見えません。これは、リスト内包と最短superintendent

1

superが含まれているリスト内のすべてのものに置き換えられます

i=0 
while i < len(list): 
    if 'super' in list[i]: 
     list[i] = 'superintendant' 
    i+=1 

:例えば

lst = ["resident super", "super live in", "on site superintendent in building", 
"livein super", "residential super", "superintendent lives in", "on-site super", "mega-intendent"] 

new_lst = ['superintendent' if 'super' in item else item 
      for item in lst] 

print(new_lst) 
# ['superintendent', 'superintendent', 'superintendent', 'superintendent', 'superintendent', 'superintendent', 
# 'superintendent', 'mega-intendent'] 
関連する問題