2012-03-21 49 views
1

私は質問音がちょっと奇妙だと知っています。私は状況を説明してみましょう:パターンを使用して文字列から文字列のリストを取得する方法は?

私はこのようになります未定義のテキストを持っている:あなたは気づくことのよう

Lorem {placeholder1} ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. {placeholder2} Cum sociis natoque penatibus et magnis dis parturient montes, {placeholder3} nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo

、テキスト内のいくつかのプレースホルダがあります:{PlaceholderX}。私が知っている唯一のことは、プレースホルダが{}に囲まれていることです。私はそれらの間に何があるか知りません。

今、私はテキストから{}で囲まれたすべての文字列のリストを取得する最良の方法を探しています。

または、より一般的には、{*}のようなパターンをいくつか用意し、すべての適切な単語を文字列として返す方法がありますか?

+0

これにREGEXタグを付けます。私はあなたにREGEXを与えるほど十分にREGEXを知らないが、REGEXはそれを行うだろう。タグを付ける権限があると思います。私は正規表現を追加しました。 – Paparazzi

+0

hmmmm、自然言語のパターンマッチング。これはRegexの仕事のように聞こえる! –

答えて

4

、あなたがlookarounds

(?<=\{)(.*)(?=\}) 

の使用を確認する必要があり、この場合、*それは任意の非空白文字を見つけることを意味します。

Here is a C# tutorial on how this can be used

カッコの間

私はあなたの例

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
    // First we see the input string. 
    string input = "Lorem {placeholder} ipsum {placeholder2} ..."; 

    // Here we call Regex.Match. 
    Match match = Regex.Match(input, @"(?<=\{)(.*)(?=\})", 
     RegexOptions.IgnoreCase); 

    // Here we check the Match instance. 
    if (match.Success) 
    { 
     // Finally, we get the Group value and display it. 
     foreach(var matchgroup in match.Groups) 
      Console.WriteLine(matchgroup.Value); 
    } 
    } 
} 
1

を探しています。このような何か:あなたは正規表現を探している

string pattern = @"Your text with {placeholders} in it" 
string[] placeholders = regex.Matches(input, @"\{\w+\}"); 
+0

これはあなたにも{}を与えるでしょう。 OPは、{} –

+0

@JustinPihonyええに囲まれた値だけを求めました、そうです。私は逃しました。私はすでにあなたの答えでより深くそれをカバーしているので、それを更新するのは苦労しません。(だから私はあなたに+1しました) – Robbie

1
Regex regex = new Regex("\{[^\}]+\}"); 
string[] matches = regex.Matches(text); 
0

あなただけの投稿の答えから任意の正規表現に貼り付ける、次のコードを使用することができるためにそれを適応しています。プレースホルダーのフォーマット方法に応じて、さまざまな可能性があります。

String s = "Lorem {placeholder1} ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. {placeholder2} Cum sociis natoque penatibus et magnis dis parturient montes, {placeholder3} nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo"; 
Regex r = new Regex("{[a-zA-Z0-9]+}"); // Or any other regex found in one of the answers. 
MatchCollection mc = r.Matches(s); 
foreach (Match m in mc) { 
    Console.WriteLine(m.Value); 
} 

あなたは

using System.Text.RegularExpressions; 
0
string s = "Lorem {placeholder1} ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. {placeholder2} Cum sociis natoque penatibus et magnis dis parturient montes, {placeholder3} nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo"; 
Regex regex = new Regex(@"{\w*}"); 
var temp= regex.Matches(s); 
foreach(var item in temp) 
{ 
    string key = item.ToString().Trim('{').Trim('}'); 
    Console.WriteLine(key); 
} 
0

怠惰なプラスの正規表現パターンを使用してくださいを使用していることを確認してください。これは動作します:あなたはNVelocityに見ている

var txt = 
    @"Lorem {placeholder1} ipsum dolor sit amet, consectetuer adipiscing elit. 
    Aenean commodo ligula eget dolor. Aenean massa. {placeholder2} Cum sociis 
    natoque penatibus et magnis dis parturient montes, {placeholder3} nascetur 
    ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium 
    quis, sem. Nulla consequat massa quis enim. Donec pede justo"; 

// need to do a lazy plus match... 
var pattern = @"\{.+?\}"; 
var matches = Regex.Matches(txt, pattern); 
foreach(Match match in matches) 
{ 
    Console.WriteLine(match.Value); 
} 

出力は、

{placeholder1} 
{placeholder2} 
{placeholder3} 

これは言われているのだろうか?

関連する問題