2011-02-02 19 views
0

私は今朝これで苦労しています。いくつかの正規表現の達人が私を正しい方向に向けることができますように。基本的に、私は2つの文字列の値を比較する正規表現を使用しています。同じ正規表現を両方の文字列に適用する必要があります。すべての名前付きグループのすべての値が一致する場合、同等の文字列(この名前付きグループチェックはコード内で行われます)が考慮されます。名前付きキャプチャ2つのバリエーションを持つ正規表現

文字列の場合、 "jw-cst"のように "cst"と比較する必要があります。私が必要とする正規表現は、これらの同等のものを考慮する必要があります。以前のものと同様に、 ' - 'を含めて名前付きグループに取り込むべきではありません。

そう...

JW-CST - >キャプチャグループ値= "CST" CST - >キャプチャグループ値= "CST"

キャプチャグループの名前は、アプリ無関係です私はそれぞれのグループを介して単純なループを使って作業しています。両方の結果が一致していることを確認します。 (?。。。 - | *)(< =

しかし、それは第二の一致条件を使用しているようだ...ので、必ず戻っ

は、これまでのところ私はこれを持っています"cst"の代わりに "jw-cst"を使用します。 2番目の選択肢(。*)を削除すると、正しく一致します...どんな助けでも大歓迎です。

+0

あなたが取り組んでいるのはその種類の文字列ですか?この場合、単純な '/-(()*)$/'で十分でしょう。しかし、私はそれがもっと複​​雑だと確信しています。あなたは本当の文字列を提供することができますし、あなたは何を期待していますか? – Pierre

+0

良い入力と悪い入力の両方の具体的かつ完全な例を挙げる必要があります。 – tchrist

+0

1組の文字列はすべて2文字または3文字(イニシャル、BLまたはMRK)になり、もう1組の文字列は前と同じ(イニシャル、BLまたはMRK)か、2つのイニシャルの組み合わせになります、決してそれ以上(すなわち、BL-MRKまたはDLN-MRK)。私はイニシャルの2番目のセットと常に一致します(つまり、文字列がBL-MRKの場合、MRK部分のみに興味があります)。 例: 1)ALK 2)ALKキャプチャ:ALK 1)BLK-CRS 2)CRSキャプチャ:CRS 1)DN-ELB 2)ELBキャプチャ:ELB 1)FN-GA 2)GAキャプチャ:GA – Jason

答えて

1

あなたは、この正規表現を使用できます。

^(?:\w+-)?(\w+)$ 

をし、両方の文字列に適用します。キャプチャー・グループ1には、同じストリングが入っていなければなりません。

文字列の長さに制限はなく、英数字を使用できます。あなただけの、たとえば2〜3 ASCII文字を許可したい場合は、(これは正規表現エンジン、したがって、)プログラミング言語に関する情報を提供する場合は、

^(?:[A-Z]{2,3}-)?([A-Z]{2,3})$ 

を使用することができ、使用している、私はのためのより多くのヒントがあるかもしれません君は。

は、.NETでは、あなたも使用できます。

(?<=^(?:\w+-)?)\w+$ 

その方法は、マッチ全体が唯一の「第二」の部分で構成されます。

+0

非常に良い!ありがとう、それです。参考までに、.Netを正規表現エンジンとして使用する。あなたが提供した最初の正規表現はちょうど良いトリックです。私は私があまりにも|より単純なソリューションを探すのではなく、もう一度お時間をありがとう。 – Jason

関連する問題