2009-02-26 2 views
0

私は、文字列があります。今、私が欲しい取得整合値、正規表現のC#

タイプ名 "ABC" <テキスト1>テキスト2>
> "AB123" <テキスト3

を「<」または「>」

が先行しているすべての英数字の単語を抽出するために、だから私は書いた:

[<>]\s*(?'name'\w+) 

私はマッチを得ています(たとえば、上記の例では3つのマッチがあり、それぞれnameというグループがあります)。名前にはtext1、text2、text3の値にアクセスできます。しかし、私は彼らが同じグループに来てほしいが、別のキャプチャ、私は

foreach(Capture C in Match.Groups["name"]) 

ような何かを書くことができるように、私はので、私は正規表現を処理するために、私のパーサを設計した方法で、それは異なる期待するので、それを必要とします同じグループの値ではなく、異なるキャプチャの値です。一緒に育てる方法として私を助けてくれますか?

+2

第3のもの!なぜ元のスレッドを使用できないのですか?http://stackoverflow.com/questions/589323/extending-regular-expression-in-c、http://stackoverflow.com/questions/585853/regex-for-variable- declaration-and-initialization-in-cと今これを使用しています。 – dirkgently

答えて

0

入力の残りの部分では望ましくないものを考慮する必要があるため、同じマッチでそれらを実際にはしたくないので、遅くなります。あなたは次のようなことをしたほうがいいです。

Regex re = new Regex(@"[<>]\s*(?<name>\w+)"); 
MatchCollection matches = re.Matches("type_name \"abc\" <text1> text2 > \"ab123\" < text3");    
foreach (Match m in matches) 
{ 
    string name = m.Groups["name"].Value; 
}