2011-09-18 18 views
1

私は、正規表現の最後のグループに 'noun'という単語をマッチさせようとしています。Pythonで単一の正規表現で正規表現グループ内の特定の文字列を検索するにはどうすればよいですか?

は、これまでのところ私が持っている:

noun 

UPDATEを:私は取得する必要があり

transportation openair noun 

tags = 'motocykl mutka 1 motorcycle bike moped 0 transportation openair noun' 

print re.search('(?P<pol>\D+)(?P<d1>\d)(?P<eng>\D+)(?P<d2>\d)(?P<end>\D+)', tags).group('end') 

私が得るすべては、その最後のグループである文字列です。 :

「名詞」がのように表示されないことを忘れてしまいました。一部の文字列の単語私は正規表現を実行しています。たとえば、次のように

tags = 'dźwig 1 crane 0 noun construction vehicle' 
tags = 'trycykl 1 tricycle 0 child noun transportation' 

単一の正規表現にしてこれを行う方法上の任意のアイデア?

+0

必要なロジックを推測するのは、あなたの例からは不可能です。トークンが常に「名詞」であれば、「名詞」と文字通り一致するのはなぜですか?そうでない場合、我々はいくつかのトークンが存在し、どのトークンがどれくらいのものかを知ることができないことだけを知っています。 – tripleee

+0

なぜ1つの正規表現が必要ですか?行を解析するために1つの正規表現を行い、最後にマッチしたグループから '名詞'の文字列を取り除くことはできませんか? – steveha

答えて

1
のタグが何を意味するかわから

ないけど\D+?は「交通オープンエアー」を一致させる必要があると[a-zA-Z]が最後の単語(名詞)と一致します:

^(?P<pol>\D+)(?P<d1>\d)(?P<eng>\D+)(?P<d2>\d)\D+?(?P<end>[a-zA-Z]+)$

+0

私はお詫びしますが、私は十分に自分自身を説明しませんでした。単語「名詞」は必ずしも文字列の最後の単語として表示されるとは限りません。詳細については、私の更新された質問を見てください。 –

0

あなたの問題はあなたが\D+と一致していることです、スペースを含む複数の単語に一致します。それは、あなたが最後の単語群を得ていることを完全に意味します。

したがって、最後のグループを空白以外の文字と一致させる必要があります。また、最後のグループが空白文字の前に一致するようにする必要があります。

「カテゴリ」と呼ばれるグループの「transport openair」に一致し、グループ「end」の「noun」に正しく一致するパターンがあります。 categoryの一致で非貪欲な+を使用したので、endグループを実際に文字列の最後の単語に固定するには、$が必要です。

re.match(r'(?P<pol>\D+)(?P<d1>\d)(?P<eng>\D+)(?P<d2>\d)(?P<category>\D+?)\W+(?P<end>\w+)$', tags).group('end') 
+0

私はお詫びしますが、私は十分に自分自身を説明しませんでした。単語「名詞」は必ずしも文字列の最後の単語として表示されるとは限りません。詳細については、私の更新された質問を見てください。 –

関連する問題