Извлечь строку между фигурными скобками, используя RegEx, т.е. {{content}} - PullRequest
2 голосов
/ 16 октября 2010

Мне дана строка с заполнителями в формате {{some_text}}.Я хотел бы извлечь это из коллекции, используя C #, и считаю, что RegEx - лучший способ сделать это.RegEx немного над моей головой, но он кажется достаточно мощным, чтобы работать в этом случае.Вот мой пример:

<a title="{{element='title'}}" href="{{url}}">
<img border="0" alt="{{element='title'}}" src="{{element='photo' property='src' maxwidth='135'}}" width="135" height="135" /></a>
<span>{{element='h1'}}</span>
<span><strong>{{element='price'}}<br /></strong></span>

Я хотел бы получить что-то вроде этого:

collection [0] = "element = 'title'";

collection [1] = "url";

collection [2] = "element = 'photo' property = 'src' maxwidth = '135'";

collection [3] = "element = 'h1' ";

collection [4] =" element = 'price' ";

Обратите внимание, что также нет дубликатов, но я не хочу усложнять вещи, если этоэто трудно сделать.

Я видел этот пост, который делает нечто подобное, но в квадратных скобках: Как извлечь содержимое квадратных скобок в строку текста в C # с помощью Regex

Моя проблема в том, что у меня двойные скобки вместо одного символа.Как я могу это сделать?

Ответы [ 3 ]

4 голосов
/ 16 октября 2010

Точно из вопроса, который вы связали:

ICollection<string> matches =
    Regex.Matches(s.Replace(Environment.NewLine, ""), @"\{\{([^}]*)\}\}")
        .Cast<Match>()
        .Select(x => x.Groups[1].Value)
        .ToList();

foreach (string match in matches)
    Console.WriteLine(match);

Я изменил [и] на {{и}} (сбежал). Это должно сделать коллекцию вам нужно. Обязательно прочитайте первый ответ на другой вопрос о разбивке регулярных выражений. Важно понимать это, если вы используете это.

0 голосов
/ 16 октября 2010

Вам нужно будет избавиться от дубликатов после того, как у вас есть совпадения.

\{\{(.*?)}}

Результат 1

  1. элемент = 'название'

Результат 2

  1. URL

Результат 3

  1. элемент = 'название'

Результат 4

  1. element = 'photo' property = 'src' maxwidth = '135'

Результат 5

  1. элемент = 'h1'

Результат 6

  1. элемент = 'цена'
0 голосов
/ 16 октября 2010

RegEx более чем достаточно мощный для того, что вам нужно.

Попробуйте это регулярное выражение:

\{\{.*?\}\}

Это будет соответствовать выражениям в двойных скобках, лениво.

Редактировать: , который даст вам строки, включая двойные скобки. Вы можете анализировать их вручную, но если механизм регулярных выражений поддерживает lookahead и lookbehind, вы можете получить то, что внутри, непосредственно с чем-то вроде:

(?<=\{\{).*?(?=\}\})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...