2017-04-03 10 views
1
TYPE1: Name Potential (parenthesis) (POSITION1) 
TYPE2: Name (POSITION2) 
TYPE3: Name with no Position 

私は3つのものを抽出しようとしています。 TYPE,NAME,POSITION。ポジションはオプションです。名前に括弧を付けることができます。 私は非常に多くのREGEXを試しましたが、貪欲ではない方法を理解することはできませんが、依然として名前のかっこを含めることはできません。正規表現と一致しないオプションの末尾の

これらはこの1 doesnの私の最後のグループ

  • TYPE1、名前の可能性(括弧)、POSITION1
  • TYPE2、名前、POSITION2
  • TYPE3、名前

ことになっています最初に正しく一致しない:
(?<TYPE>.*?):\s*(?<NAME>[^(]*)\s*(?:\((?<POSITION>.*?)\))?

これはあまりにも貪欲ですが、私はポジションを抽出しません:
(?<TYPE>.*?):\s*(?<NAME>.*)\s*(?:\((?<POSITION>.*?)\))?

+1

どこにいらっしゃいますか?あなたのパターンを投稿し、何が間違っているのかを説明してください。 –

+0

ここに行く...私はそれを追加しました。 – jsgoupil

+0

'type'は常に1つの単語だけですか? – anubhava

答えて

1

あなたは、オプションの試合として最後のグループで、この正規表現を使用することができます。

^(?<TYPE>[^:]+):\h*(?<NAME>.+?)(?:\h+\((?<POSITION>[^)]+)\))?$ 

RegEx Demo

\h場合(水平空白)が正規表現のフレーバでサポートされていない場合は、代わりに[ \t]を使用してください。

+1

これはうまくいきます。 NAMEが空であることがわかるまでは。私はRegexをちょっと更新しましたが、私はあなたのものに基づいています!ありがとうございました。 (?:[\ t] * \((? [^)] +)\(? [^:] +):[\ t] *(? ))? ' – jsgoupil

関連する問題