2009-06-10 19 views
0

サブ表現をマークする必要がある正規表現(.Net)を作成しています。サンプルの入力は以下のとおりです。正規表現のサブ式

  1. EFBCFEyy
    • EFBQFEyyQ
    • EFBQFE YYのQ
    • EFBMFEyyMM
    • EFByyMFEMM

私はすべてを引き出すためにされて必要なもの"yy"または " MM "。私が今までに得た表現は最初のいくつかの文字列では動作しますが、最後のペアでは動作しません。空白がある場合もあります。空白は、日付以外の文字で囲まれています。

「/」(それぞれ)これは私が探している、部分式を分離することで、太字の部分は、私が操作する必要があるものであることで正規表現が評価された後:

  1. EFBCFEを/ YY
    • EFBQFE/YY/Q
    • EFBQFE/YY/Q
    • EFBMFE/YY/MM
    • EFB/YY/MFE/MM

は、ここでは最初の3のために働くこと私が持っているものです。

(.*)(yy|MM)(.*) 

私は何が欠けていますか?

答えて

2

、これはあなたがやりたいことになります。

MyString.split('yy|MM') 

.NETが同様の正規表現の分割機能を持っていない場合、私は驚かれることでしょう...

ここで行きます、これは、.NETと同等になりそうだ。 http://msdn.microsoft.com/en-us/library/8yttk7sy.aspx

Regex.Split(MyString , 'yy|MM') 
+0

それは完璧です、私はそれが気づかなかったのか分かりません。ありがとう! – Dov

+0

+1唯一の問題は、あなたが後で分割したことを知らないことです。あなたは作品を持っていますが、どのデリミタがそれらの間にあるのかは分かりません。 – Tomalak

+0

実際、どの区切り記号が使用されたかを知る必要がある場合、より複雑なロジックが必要です。 –

2

"私が必要とするのは、" yy "または" MM "で区切られたすべてのサブ式を取り除くことです。 (私は質問をminunderstandない限り)すべてが必要だ

yy|MM 

「グローバル」として適用します。私にとって、それは太字の部分と一致します。

  • EFBCFE YY
  • EFBQFE YY Q
  • EFBQFE YY Q
  • EFBMFE YYMM
  • EFB YYを MFE MM
  • Javaでは210
+0

あなたは「『グローバル』として適用する」とはどういう意味ですか? – Dov

+0

正規表現エンジンには、いわゆる「グローバル」フラグがあります。それは文字列全体にパターンを繰り返し適用するので、最初の一致以上のものを見つけることができます。 – Tomalak

+1

http://gskinner.com/RegExr/を見てしばらく遊んでください。あなたは私が何を意味するか見るでしょう。 – Tomalak