2016-11-12 11 views
0

私は入力のこの種のための正規表現を必要とする:正規表現 - オプションのブラケット

AB: EF 
AB : EF 
AB (CD): EF 
AB (CD) XY: EF 

私は3つのグループが必要です。 1つはABのため、もう1つはCDのためのもの(何もない場合は空になる可能性があります)、EFの3番目です。

どのようにそのような正規表現を書くのですか?

私が試した:

(.*)?\s(\(.*\))\s?(.*)?:\s(.*) --- AB: EF doesn't match 
(.*)?\s?(\(.*\))\s?(.*)?:\s(.*) --- AB (CD): EF has the second group is empty 
+1

実際の例を示し、使用する言語のタグを追加します。 –

+0

例題 'AB(CD)XY:EF'はあなたの記述と一致しません»私は3つのグループが必要です«。一致するはずですか? – Socowi

+0

あなたは3つのグループが必要ですし、XYは何のためですか? – Real73

答えて

2

これは、数字だけをしたい場合\d\wを交換しsee here

(\w{2}):? *(\((\w{2})\))?.*?: *(\w{2}) 

、ほとんどの正規表現エンジンで動作します。

グループ1はABと一致し、グループ3はCDと一致し、グループ4はEFと一致します。スペース

  • (\((\w{2})\))?CDオプションの試合、任意の2つの文字の英数字、括弧内の
  • .*?:マッチ任意の文字までの任意の数字が続く

    • (\w{2})試合AB、任意の2つの文字の英数字
    • :? ?マッチオプション:次の:
    • *は、任意の数のsp

      \w*\s?(\(.*\))?\s?\w*:\s?\w*

      これを適用することもできる。このことについてどのように:

    • (\w{2})試合EF、任意の2つの文字の英数字
  • 2
    (\w+) ?(?:\(?(\w{2})\)?.*)?: (\w*) 
    

    をこれはあなたが必要な正確に何を行います。証明:https://regex101.com/r/1TlGy9/1

    あなたは3つのグループを必要と言ったように、私はあなただけで、他の言葉で、オプションとして「XY」部分を持っていると思ったと仮定:あなたはそれを一致させる必要はありませんが、他のグループにもマッチさせたいですそれが存在するならば。

    0

    後のエース。

    ありがとう

    +0

    https://regex101.com/r/cQeRhO/1 画面の右側にある一致情報に表示されているように、この正規表現は正しいグループを指定していません。私はあなたの解決策をチェックしたいと思った。なぜなら、それは私のものよりもはるかにきれいに見えたが、残念ながらそれは質問が尋ねることをしていない。 –

    関連する問題