2012-03-21 36 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会这样做。我想我有权标记。我添加了正则表达式。 – Paparazzi 2012-03-21 17:42:53

+0

hmmmm,自然语言中的模式匹配。这听起来像是正则表达式的工作! – 2012-03-21 17:43:27

回答

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

这也会给你{}。该任择议定书要求只能由{} – 2012-03-21 17:48:35

+0

包围值@JustinPihony是啊,你是对的。我错过了。我不会更新它,因为您已经在答案中更深入地介绍了它。(所以我为你+1) – Robbie 2012-03-21 17:55:41

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

使用懒惰加正则表达式。这将工作:

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} 

这是说,你看着NVelocity

相关问题