2016-10-23 23 views
0

私は文字列'(test)skip(test774)2;3(xx2324)'を持っています。単語'skip'が必要です。正規表現エキスの特定部分

re.search('skip[(].+[)]', args[0]).group(0) 

は私に'skip(test774)'を与えるが、ない'test774'。私は[5:-1]をスライスして'test774'を得ることができますが、あまりにも不器用です

正規表現を使用して角括弧内の値( 'test774')のみを取得する最も簡単な方法はありますか?

+1

実際に必要な部分にキャプチャグループを追加することを検討しましたか? – jonrsharpe

答えて

2

目的のテキストを分離するには、そのテキストと一致する正規表現の部分の周囲にキャプチャグループを使用します。

re.search('skip[(]([^)]+)[)]', args[0]).group(1) 

あなたは.+(文字の任意の非空のシーケンス)がどこで作られた変化である、私は()以外の文字の空でない配列を含むキャプチャグループを([^)]+)を持っている。これは、この部分を意味し、試合は、)の直前ではなく、最後の)の直前ではなく、.+となります。

regex101.com demo and explanation

+1

これは、入力例を[失敗](https://regex101.com/r/wwSYoT/1)にします。キャプチャグループ_lazy_ '(。+?)'内で評価を行うか、またはパフォーマンスを向上させるために、閉じ括弧 '([^)] +)'を否定する必要があります。 – TemporalWolf

+0

あなたは正しいです。 '。^'を '[^]]に変更するように編集しました+ – cco

+0

私はdebuggex/regex101へのリンクを削除して、彼が持っていたものと比べてなぜこのように機能するのかを説明することをお勧めします。このようにして、同様の問題を抱えている人は、自分の問題を解決する方法を知ることができます。コードのみの回答は一般的に低品質とみなされます。 – TemporalWolf