Как получить список строк из строки, используя шаблон? - PullRequest
1 голос
/ 21 марта 2012

Я знаю, что вопрос звучит немного странно. Позвольте мне объяснить ситуацию:

У меня есть неопределенный текст, который выглядит следующим образом:

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}. Единственное, что я знаю, это то, что заполнитель окружен {}. Я не знаю, что между ними.

Теперь я ищу лучший способ получить список всех строк, окруженных {}, из моего текста.

Или, чтобы сделать это более общим, есть ли способ, где я могу предоставить какой-то шаблон, такой как {*} и вернуть все подходящие слова в виде строк?

Ответы [ 7 ]

4 голосов
/ 21 марта 2012

Вы ищете регулярные выражения, в этом случае вам нужно использовать lookarounds

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

. * Означает, что он найдет любой непробельный символ между фигурными скобками

Вот учебник C # о том, как это можно использовать

Вот пример, который показывает, как вытащить каждый элемент

Я адаптировал его для вашего примера

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 голос
/ 21 марта 2012
Regex regex = new Regex("\{[^\}]+\}");
string[] matches = regex.Matches(text);
1 голос
/ 21 марта 2012

Вы можете использовать регулярное выражение. Примерно так:

string pattern = @"Your text with {placeholders} in it"
string[] placeholders = regex.Matches(input, @"\{\w+\}");
0 голосов
/ 21 марта 2012

Используйте ленивый шаблон регулярных выражений. Это будет работать:

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 ?

0 голосов
/ 21 марта 2012
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 голосов
/ 21 марта 2012

Вы можете использовать следующий код, просто вставьте любое регулярное выражение из опубликованного ответа. Есть много возможностей в зависимости от того, как заполнители отформатированы.

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 голосов
/ 21 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...