Что я хочу сделать, это проанализировать некоторые пользовательские теги из строки, а также получить немаркированный контент. Например, у меня есть следующие строкиRegex для захвата помеченного и немаркированного содержимого
Hello World <Red>This is some red text </Red> This is normal <Blue>This is blue text </Blue>
Я получил рабочее регулярное выражение для получения помеченного контента с помощью
<(?<tag>\w*)>(?<text>.*)</\k<tag>>
Однако это возвращает
tag: Red
text: This is some red text
tag: Blue
text this is blue text
Что мне нужно чтобы получить совпадения для немаркированного контента, поэтому я бы получил 4 матча, два, как указано выше, а также «Hello World» и «Это нормально».
Возможно ли это с регулярным выражением?
Для примера это моя функция тока:
public static List<FormattedConsole> FormatColour(string input)
{
List<FormattedConsole> formatted = new List<FormattedConsole>();
Regex regex = new Regex("<(?<Tag>\\w+)>(?<Text>.*?)</\\1>", RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
);
MatchCollection ms = regex.Matches(input);
foreach (Match match in ms)
{
GroupCollection groups = match.Groups;
FormattedConsole format = new FormattedConsole(groups["Text"].Value, groups["Tag"].Value);
formatted.Add(format);
}
return formatted;
}
Как уже упоминалось это возвращает только матчи между тегами. Мне также нужно получить текст без тегов.
(кстати FormattedConsole это просто контейнер, который содержит текст и цвет)
Как это связано с WPF? – Clemens
Является ли входной XML или он просто похож на XML? –
@Clemens Извините, что я виноват, я привык отмечать как WPF, потому что многие мои вопросы требуют разных ответов, потому что я работаю в WPF. Сила привычки. – Ben