2016-11-02 4 views
-2

私は[T][\T]の間と後に、前にすべてのものを抽出することになっている正規表現C#の - の間と後にする前にすべて、[T] [/ T]

([\s\S]*?)\[T\]([\s\S]*?)\[\/T\]([\s\s]*?) 

この正規表現をしましたが、私は常に第三の取得キャプチャグループは空です。

私のテキストは次のとおりです。

<h1>HelloWorld</h1> 
[T] 
<h2>I'm Inside</h2 
[/T] 
<h1>HelloWorld</h1> 
[T] 
<h2>I'm Inside</h2 
[/T] 
<h3>By World</h3> 

私はRegexrRegex101を使用し、間違いが最後のキャプチャグループ([\s\S]*?)?にあった、beacuseは怠惰*をやっているという結論になりましたしました。しかし、私はそれを削除する場合は、2つではなく1つのマッチとしてすべてをグループ化します。

EDIT:

は基本的に私は

var template = @" <h1>HelloWorld</h1> 
    [T] 
    <h2>I'm Inside</h2 
    [/T] 
    <h1>HelloWorld</h1> 
    [T] 
    <h2>I'm Inside</h2 
    [/T] 
    <h3>By World</h3>"; 

var regex = new Regex("([\s\S]*?)\[T\]([\s\S]*?)\[\/T\]([\s\s]*?)"); 
var finalString = regex.Replace(template,"$1 ; $2 ; $3"); 

// finalString = HelloWorld ; I'm Inside ; By World // 

感謝任意の助けのような何かをしたいです。

+0

あなたは望ましい結果が何であるか(より具体的な)を指定することはできますか?なぜなら、この正規表現は、最後の行を除くすべて([T]と[/ T]タグを含む)を選択するからです。 – Jim

+0

準備が整った、編集をした、そしてええ、それはかなり簡単です。最後の行を含め、エラーが発生する箇所をすべて選択したいと思います。 –

+0

タグ内にテキストをキャプチャし、タグなしでテキストを出力しようとすると、あなたの質問は明確ではありません.1回のパスでは不可能です。 'h2'タグは'> 'で閉じられません。本当にあなたのものですか? '[\ s \ s]'は分かりません。 '\ s'と同じです。今のところ私はhttp://ideone.com/upIXLRを提案することしかできません。確認して更新してください。 –

答えて

0

あなたの質問のタイトルは実際の出力例では逆転するので、私の答えは実際の出力に基づいています。

目的の出力を得るには、指定したテキストのパターンを確認する必要があります。キャプチャしたいテキストはではなく、[T] [/ T]の間に常にです。しかし、それは私はあなたのための一例を作ったそのロジックに基づいて> ... <

の間で常にです:

Regex reg = new Regex(@"(?<=\>).+?(?=\<)"); 

var matches = reg.Matches(content); 

// get distinct result 
var result = matches.Cast<Match>().Select(m => m.Value).Distinct().ToList(); 

StringBuilder builder = new StringBuilder(); 

// build the string 
foreach (var item in result) 
{ 
    builder.Append(item).Append(" ; "); 
} 

// remove last added " ; " 
builder.Length = builder.Length - 3; 

// builder now equals "HelloWorld ; I'm Inside ; By World" 
Console.WriteLine(builder); 
+0

ありがとう私はそれをテストします –

関連する問題