2012-03-21 35 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

相關問題