2012-05-05 12 views
1

さまざまな記号を含む文字列がありますが、%と%の間にある10文字の英数字部分文字列を取得する必要がありますが、そして%1つの文字列%と%の間の10文字の英数字の組み合わせに一致

例に:

String resultString = Regex.Match(lnk, @"\[%\](.*?)\[%\]{10}").Value; 

、それは動作しません:%のbla1234blaの%、または%12aa22bb33%など(私は%を必要としない)

私はこれを試してみました

+0

は '%bla1234567890%'有効な一致ですか? – gdoron

+0

%bla1234bla%、または%12aa22bb33%など – Andrew

+2

"それは動作しません":より具体的にすることはできますか?どのようなエラーが出ますか?それはしてはいけないときにマッチするものは?それが必要なときに一致しないものは何ですか? –

答えて

1
(?<=%)[\da-zA-Z]{10}(?=%) 

肯定先読みと後読みを探していることで、これは実際%の文字に一致せず、%の文字の間に10個の文字の英数字にマッチします。

+1

これは非常に複雑な方法です。 – gdoron

+0

@gdoron:なぜそれをお考えですか?先読みは/高価なのか、これはちょうど構文的に複雑ですか? – spender

+0

パフォーマンスについてはわかりませんが、構文が複雑です。 – gdoron

6
@"%[0-9a-zA-Z]{10}%" 

またはこの:0この正規表現してみ

@"%[^\W_]{10}%" 

を私はあなたが望むどの部分を指定するためにキャプチャグループを使用することができます

%を必要としません。キャプチャする:

@"%([0-9a-zA-Z]{10})%" 

オンラインで作業、それを参照してください:ideone

+0

申し訳ありませんが、私は10記号の長さを持つ文字/数字を意味しました – Andrew

+0

@Andrew。大文字はどうですか? – gdoron

1

はこの1つを試してみてください:

@"%[\da-zA-Z]{10}%" 
1

ない正規表現が要件ですが、これは動作しているようならば必ず...

string[] stringArray = testString.Split('%') 
           .Where(s => s.Length == 10) 
           .ToArray(); 
関連する問題