2017-05-31 15 views
0

文字列に文字a〜zの小文字の単語が出現するインデックスを見つける必要があります。ただし、文字列には単語内にアルファベット以外の文字が含まれていることがあります。Python Regex中間で非アルファベットの単語を検索する

たとえば、単語「dont」は、「do not do that」という語句のインデックス[0,5]にまたがります。

私は非アルファの文字にマッチする方法を周りに検索し、次の正規表現でこれを達成:

>>> import re 
>>> pattern = re.compile("d[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*") 
>>> test = "don't" 
>>> pattern.search(test).start() 
0 
>>> pattern.search(test).end() 
5 
>>> test = "d'o&&&&&n't" 
>>> pattern.search(test).start() 
0 
>>> pattern.search(test).end() 
11 
>>> 

は、この正規表現を表現するために、より簡潔な方法はありますか?または、検索したいすべての単語の中に[^ a-z] *を挿入するコードを記述する必要がありますか?

申し訳ありませんがこの質問が既に存在する場合 - 私は正確にこの質問をどのようにフレーズするか分かりません。助けてくれてありがとう。

+1

本当にここで何を達成しようとしていますか?これはnltkの問題ではありませんか? – Jan

答えて

1
あなたは非キャプチャグループの下に繰り返しを使用して、そのようなすべての小文字の単語を一致させることができます

>>> word = 'dont' 
>>> regex = ''.join(x + '[^a-z]*' for x in word) 
>>> regex 
'd[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*' 
0

試してみてください。また

(?:[a-z][^a-z]*)+ 

、あなたはすべての与えられた単語のために、この正規表現を自動化することができますこれは:

pattern = re.compile("[^\w']|don't") 
1

はい、本当にあなたの意図であるかのようにしなければなりませんに。

正規表現は、特定の文字または文字型の結果のシーケンスにのみ一致します。一致する必要がある他の文字があるので、d&&odoと一致させる必要があることはわかりません。